PostgreSQL:剩余的连接槽是为非复制超级用户连接保留的,已经有太多客户端

Kok*_*zzu 4 postgresql scalability

我们有使用GolangPostgreSQLsqlx(适配器、连接池)的Web 应用程序,每个请求需要 1 到 8 个查询,有时 1 个事务需要 5-8 个选择和 5-8 个插入查询。

我们已经将 PostgreSQL 设置max_connections为 1024,然后是 4096,但是它开始交换,所以我们将它们减少到 64(这是交换前的限制)。

我们的 RAM 是 2GB,我们将 PostgreSQL 配置working_mem为 16MB、temp_buffers8MB、shared_buffers800MB、effective_cache_size 1536MB(这个配置根本不交换)。

每天 00:00 到 02:35 每秒大约有 18 个请求,每秒大约有 8 个错误,此时每小时只有 10 个事务成功,其他事务失败,错误消息如下:

  • 剩余的连接槽保留用于非复制超级用户连接
  • 已经有太多客户了

除了缓存只读页面(因为页面每分钟可以更新10次左右)或升级机器之外,如何克服这个问题?

Cra*_*ger 5

max_connections = 1024?!您需要一个连接池。

如果您的应用程序不支持内置池,请在事务池模式下使用 PgBouncer。

您正在小型玩具服务器上运行 PostgreSQL。保持低活动连接数并按顺序排列队列。

高会max_connections导致显着的低效率,并且有大量活跃的工作连接会增加更多。