读书人

postgresql集群提案hot standby初级测

发布时间: 2012-07-29 15:26:14 作者: rapoo

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和nameCREATE 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个插入操作


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

直接上数据:

线程数量

每个线程插入次数

总时间(s)

每秒处理次数

1

1000

0.684

1461.988304

1

10000

6.56

1524.390244

1

50000

33.008

1514.784295

1

100000

76.972

1299.173726

2

1000

0.83

2409.638554

2

10000

7.96

2512.562814

2

50000

41

2439.02439

2

100000

95.675

2090.410243

3

1000

1.15

2608.695652

3

10000

11.99

2502.085071

3

50000

70.98

2113.271344

3

100000

163.4

1835.985312

5

1000

1.22

4098.360656

5

10000

15.9

3144.654088

5

50000

82.9

3015.681544

5

100000

118.4034

4222.852386

10

1000

1.830302

5463.579234

10

10000

16.94417

5901.736326

10

50000

87.61617

5706.709487

10

100000

179.2664

5578.290561

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

读书人网 >操作系统

热点推荐