PgBouncer的select()客户端连接过多

时间:2020-03-13 06:35:56

标签: postgresql pgbouncer

我创建了PostgreSql v12(port 5432)和pgbouncer v1.9(port 6432)。然后,我在pgbouncer服务器上创建了一个新的测试数据库。我按照以下步骤操作:

  1. pgbench -h localhost -p 6432 -U postgres -i -s 150 test
    

    它已经创建了pgbench表。

  2. 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()

  3. 我已经配置了pgbouncer.inipostgresql.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。

    PgBouncer.ini
    Cmd ss
    PgBouncer
    postgres.conf
    db

我想用100多个客户端清理该数据库。

1 个答案:

答案 0 :(得分:0)

如果我使用-c 85,它将正常运行。当我将-c增加到85或90以上时,表示select()的客户端连接过多。

pgbench客户端中出现文本“ select()的客户端连接过多”,而不是在Postgresql服务器或pgbouncer中出现(我可以发现,它们可能是由较小的字符串拼凑而成的)。因此,pgbench内部正在发生什么。但是,目前尚不清楚这到底是什么,因为您显示的命令当然不需要超过1024个文件描述符。

为什么要将pgbouncer注入其中呢?如果您想同时打开所有连接并使用它们,pgbouncer将为您提供任何帮助。如果直接将pgbench指向数据库,会得到同样的错误吗?

我想用100多个客户端清理该数据库。

为什么?

相关问题