PostgreSQLpgbench支援100萬連線

德哥發表於2018-06-21

標籤

PostgreSQL , pgbench , poll , 超過1000連線


背景

《阿里雲 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倍響應速度)》


相關文章