PostgreSQL pgbench 支持100万连接

less than 1 minute read

背景

《阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)》

最近测试的阿里云高并发版本的性能,在1.6万个连接下,实际SQL的响应速度是社区版本的240倍。但是很多网友问怎么测的1.6万个连接,因为pgbench默认只能连1000个连接。

超过1000个连接会报错如下

invalid number of clients  

让pgbench支持100万个连接

1、需要poll patch

https://commitfest.postgresql.org/18/1388/

wget https://www.postgresql.org/message-id/attachment/60012/pgbench11-ppoll-v12.patch  

2、下载PostgreSQL 11源码

wget https://ftp.postgresql.org/pub/snapshot/dev/postgresql-snapshot.tar.bz2  

3、patch poll

tar -jxvf postgresql-snapshot.tar.bz2  
  
cd postgresql-11devel  
patch -p1 < ../pgbench11-ppoll-v12.patch  

4、关闭限制

vi src/bin/pgbench/pgbench.c

//#ifdef HAVE_PPOLL   // 修改  
#define POLL_USING_PPOLL  
#include <poll.h>  
//#endif  // 修改  
  
  
                        case 'c':  
                                benchmarking_option_set = true;  
                                nclients = atoi(optarg);  
                                if (nclients <= 0)      // || (MAXCLIENTS != -1 && nclients > MAXCLIENTS))    // 修改  
                                {  

5、安装

./configure --prefix=/home/digoal/pgsql11  
make world -j 128  
make install-world  

现在pgbench可以愉快的测试100万个连接了。

将来PG社区版本,应该会把PATCH合进来,支持超过1000个连接。

参考

《从PostgreSQL支持100万个连接聊起》

《PostgreSQL 11 preview - pgbench 支持大于1000链接(ppoll()代替select())》

《阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)》

Flag Counter

digoal’s 大量PostgreSQL文章入口