【发布时间】:2016-07-05 22:14:39
【问题描述】:
问题 我有一个运行几百个sidekiq 后台进程的rails 应用程序。它们都连接到一个 PostgreSQL 数据库,该数据库对提供 250 个连接并不十分满意——它可以,但如果所有 sidekiq 进程不小心将查询发送到数据库,它就会崩溃。
选项 1 我一直在考虑在数据库前面添加 pgBouncer,但是我目前无法使用它的事务模式,因为我高度依赖于在开头设置 search_path每个作业处理,用于确定要处理哪个“国家”(PostgreSQL 模式)(公寓宝石)。在这种情况下,我将不得不使用基于会话的连接池模式。然而,据我所知,这将要求我在每次作业处理后断开连接,将连接释放回池中,这将是非常昂贵的性能,不是吗?我错过了什么吗?
选项 2 使用基于应用层的连接池当然也是一个选项,但是我不确定如何使用 sidekiq 为 PostgreSQL 做到这一点?
选项 3 是我没想到的?
【问题讨论】:
标签: postgresql connection-pooling sidekiq pgbouncer apartment-gem