我在繁忙的 postgres 9 数据库前运行 pgBouncer。在大多数情况下,它运行良好。但是每隔几个小时我就会收到一封来自我的应用程序的错误电子邮件,但 psycopg2 除外:
OperationalError('无法连接到服务器:无法分配请求的地址服务器是否在主机“neo-hulk”上运行并接受端口 6432 上的 TCP/IP 连接?')
这是一个 python 应用程序,其中有一堆 celery 工人正在运行任务。当这些错误到达时,我检查 pgbouncer db 并且池大小在限制范围内。经过一些实验,我将池最大大小设置为 400,池大小设置为 200。池模式是“会话”(请求主要是自动提交,几乎没有事务)。
是什么让 pgBouncer 像那样“消失”?它只是在很短的时间内(总的来说,与它处理的大量请求相比,我们谈论的是极少量的请求),但那些失败的请求很重要。
谢谢!
对于拥有超过 300,000 个帐户(并且还在增长)的大型 SAAS 应用程序(由 PostgreSql 9.4 提供支持),使用每个帐户的模式对数据进行分区与将所有数据放在一个模式中并使用外键进行分区的优缺点是什么?在查询中对其进行分区?
我知道过去 pg_dump 在处理许多模式时非常缓慢,但不确定今天是否如此。我也知道必须对所有模式进行数据库结构的任何更改。而且我知道从好的方面来说,将模式从一个物理服务器移动到另一个很容易,以及从备份中恢复模式,更不用说以这种方式对数据进行分区是有意义的。
那么我缺少的优点和缺点是什么?