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