我创建了PostgreSql v12(port 5432
)和pgbouncer v1.9(port 6432
)。然后,我在pgbouncer服务器上创建了一个新的测试数据库。我按照以下步骤操作:
pgbench -h localhost -p 6432 -U postgres -i -s 150 test
它已经创建了pgbench表。
pgbench -p 6432 -U postgres -c 200 -j 2 -P 60 -t 1000 -d test
如果我使用-c 85
,它将正常运行。当我将-c
增加到85或90以上时,我得到too many client connections for select()
。
我已经配置了pgbouncer.ini
和postgresql.conf
文件。
在pgbouncer上我添加了
test = host=localhost port=5432 dbname=test & pool_mode = transaction,max_client_conn = 10000, default_pool_size = 20
在postgresql.conf
中,我将max_connections
从100 MB增加到1000 MB,并将shared_buffers
从128 MB增加到256MB。
我想用100多个客户端清理该数据库。
答案 0 :(得分:0)
如果我使用-c 85,它将正常运行。当我将-c增加到85或90以上时,表示select()的客户端连接过多。
pgbench
客户端中出现文本“ select()的客户端连接过多”,而不是在Postgresql服务器或pgbouncer中出现(我可以发现,它们可能是由较小的字符串拼凑而成的)。因此,pgbench内部正在发生什么。但是,目前尚不清楚这到底是什么,因为您显示的命令当然不需要超过1024个文件描述符。
为什么要将pgbouncer注入其中呢?如果您想同时打开所有连接并使用它们,pgbouncer将为您提供任何帮助。如果直接将pgbench指向数据库,会得到同样的错误吗?
我想用100多个客户端清理该数据库。
为什么?