我将 PostgreSQL 与 PgBouncer 一起使用,并在我的应用程序中收到以下错误:
08P01:不允许更多连接(max_client_conn)
pgbouncer.ini 有以下配置:
max_client_conn = 100
default_pool_size = 20
pool_mode = session
Run Code Online (Sandbox Code Playgroud)
postgresql.conf 有:
max_connections = 100
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 服务器有 5 个由单个用户访问的数据库。
我的理解是max_connections应该等于(default_pool_size * # databases),并且max_client_conn至少应该是这么多。我还看到 pgbouncer.ini 中的注释default_pool_size应该等于max_client_connif using session pooling。
所以要解决我遇到的这个错误,我应该简单地设置default_pool_size = 100吗?还是只增加max_client_conn?或者是其他东西?
关于 PgBouncer 日志中的此类错误:
2020-03-10 03:46:01.730 EDT [25305] LOG C-0xa5cf00: testdb/testdb_user@127.0.0.1:49214 closing because: query_wait_timeout (age=120s)
2020-03-10 03:46:01.730 EDT [25305] WARNING C-0xa5cf00: testdb/testdb_user@127.0.0.1:49214 pooler error: query_wait_timeout
Run Code Online (Sandbox Code Playgroud)
是否有可能查看(或记录)触发错误的查询?导致此错误的最常见原因是什么?停止的服务器、繁忙的服务器?
更新:来自 PostgreSQL 的日志文件在 2020-03-10 03:46:01 没有显示任何错误
我正在尝试pgbouncer.ini在 Pgbouncer 中调整我的文件,并提出了我感觉相同的参数server_lifetime。server_idle_timeout
官方配置文档中是这么说的:
池化器将关闭连接时间超过此时间的未使用的服务器连接。将其设置为 0 表示连接仅使用一次,然后关闭。[秒]
默认值:3600.0
如果服务器连接空闲时间超过这么多秒,它将被丢弃。如果为 0,则禁用超时。[秒]
默认值:600.0
您能帮我简单地理解其中的区别吗?提前致谢!!!
我有一个物化视图,创建大约需要 57 秒,并且我使用的是 PostgreSQL 9.4。
当我插入表时,触发器将调用触发器函数,该函数将REFRESH MATERIALIZED VIEW CONCURRENTLY view触发触发器after each statement(插入、更新、删除)
发生的情况是,执行插入操作大约需要 57 秒。
如何解决此问题并仍然使用物化视图?
我已经实现了很长时间,从来没有出现过这个问题,最近我添加了pgbouncer,会不会是这个原因?