postgresql集群方案hot standby初级测试(二) ——处理数据能力

前端之家收集整理的这篇文章主要介绍了postgresql集群方案hot standby初级测试(二) ——处理数据能力前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

刚刚写完(一),本来想把两篇写在一起,但是发现关联不大,最后觉得分开写:

本文来自:http://blog.csdn.net/lengzijian/article/details/7729465

先写上数据库配置:

一个主数据库,两个从数据库

数据库:Intel(R) Pentium(R) D cpu 2.80GHz *2 | MemTotal: 1027072 kB

从库1 :Pentium(R) Dual-Core cpu E5200 @ 2.50GHz| MemTotal: 2066020 kB

从库2 :Pentium(R) Dual-Core cpu E5200 @ 2.50GHz| MemTotal: 2066020 kB

本人自己写了c语言的测试脚本,用到了libpq c库,这里附上源码:

#include <stdio.h>
#include <libpq-fe.h>
#include <pthread.h>
#include <sys/time.h>

/*
首先创建一个简单的表只有userid和name
CREATE TABLE t_user
(
  userid character varying(25),name character varying(25)
)
*/

void thread(char *count){
    int i,j;
    const char *conninfo;
    char char_time[1024];
    PGresult *res;
    PGconn *conn;
    j = atoi(count);
    struct timeval tpstart,tpend;
    float timeuser;
    gettimeofday(&tpstart,NULL);
    //数据库配置(主机地址,用户名,端口,数据库名)
    conninfo = "hostaddr=192.168.30.150 user=postgres port=5433 dbname=lengzijian";
    conn = PQconnectdb(conninfo);
    for(i = 0;i<j;i++){
        sprintf(char_time,"insert into t_user values ('%d','lengzijian')",i);
        res = PQexec(conn,char_time);
        if(!res||PQresultStatus(res)!=PGRES_COMMAND_OK) 
        {
            printf("insert Failed:%s--[%d]\n",PQerrorMessage(conn),i); 
            PQclear(res); 
        }
        PQclear(res);
    }
    gettimeofday(&tpend,NULL);
    timeuser=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;
    timeuser /=1000000;
    //输出每个线程的运行时间,方便计算平均值
    printf("Used Time:%f\n",timeuser);
    PQfinish(conn);
    
} 
//第一个变量表示线程数,第二个参数表示并发量(每个线程的插入测试)
int main(int argc,char *argv[])
{
    int i,j;
    j = atoi(argv[1]);
    pthread_t id[j]; 
    int ret;
    if(argc < 3){
        printf("Not enough arguments,exiting...");
        return -1;
    } 

    for(i=0;i<j;i++)
        ret=pthread_create(&id[i],NULL,(void *) thread,argv[2]); 

    /* 关闭数据库连接并清理 */
    for(i=0;i<j;i++)
        pthread_join(id[i],NULL); 
    
}


编译方法

gcc test.c -lpq #千万别忘了-lpq


使用方法

./a.out 1 1000         #表示1个线程1000个插入操作


由于本人机器并非服务器,所以数据只用来参考,希望读者可以用上面的代码,测试服务器上主机后,发送给本人,本人不胜感激!!!!

直接上数据:

@H_502_102@

1000

@H_502_102@

0.684

@H_502_102@

1461.988304

@H_502_102@

10000

@H_502_102@

6.56

@H_502_102@

1524.390244

@H_502_102@

50000

@H_502_102@

33.008

@H_502_102@

1514.784295

@H_502_102@

100000

@H_502_102@

76.972

@H_502_102@

1299.173726

@H_502_102@

2

@H_502_102@

0.83

@H_502_102@

2409.638554

@H_502_102@

7.96

@H_502_102@

2512.562814

@H_502_102@

41

@H_502_102@

2439.02439

@H_502_102@

95.675

@H_502_102@

2090.410243

@H_502_102@

3

@H_502_102@

1.15

@H_502_102@

2608.695652

@H_502_102@

11.99

@H_502_102@

2502.085071

@H_502_102@

70.98

@H_502_102@

2113.271344

@H_502_102@

163.4

@H_502_102@

1835.985312

@H_502_102@

5

@H_502_102@

1.22

@H_502_102@

4098.360656

@H_502_102@

15.9

@H_502_102@

3144.654088

@H_502_102@

82.9

@H_502_102@

3015.681544

@H_502_102@

118.4034

@H_502_102@

4222.852386

@H_502_102@

10

@H_502_102@

1.830302

@H_502_102@

5463.579234

@H_502_102@

16.94417

@H_502_102@

5901.736326

@H_502_102@

87.61617

@H_502_102@

5706.709487

@H_502_102@

179.2664

@H_502_102@

5578.290561

线程数量

每个线程插入次数

总时间(s)

每秒处理次数

1

猜你在找的Postgre SQL相关文章