Jah*_*tal 2 postgresql debian ruby-on-rails pg sidekiq
我的数据库非常受cpu限制,我找不到问题的根本原因.我目前有两个应用程序服务器,每个服务器都有一个通过ruby-pg gem连接到PostgreSQL的Rails api.两个应用程序服务器都有sidekiq运行后台作业,我有一些支持服务器通过sidekiq处理来自国家feed的新帖子.如果我的内存耗尽,解决方案似乎很简单.为什么我受CPU约束的任何一般想法?
数据库规格:
可能的问题:
该数据库有近10GB的索引.我要将我的数据库升级到PostgreSQL版本> = 9.2.在9.2版中,引入了仅索引扫描.
在postgresql.conf中,我将max connection设置为'500'.通常在一天中,只使用175个连接,但在高峰时段,sidekiq任务会将当前连接增加到350.建议与8GB服务器实例建立多少个连接?
当我在psql控制台中查看pg_stat_activity时,我看到sidekiq留下了很多IDLE连接.这些连接会导致CPU通胀吗?修复是否存在于api或sidekiq中?
也许没有错误.我可能只需要增加服务器实例.如果我受到记忆限制,这将更有意义.但是,app服务器和3个支持sidekiq服务器都是4gb性能层实例.实质上,与数据库交互的服务器组合了数据库资源的两倍以上.这甚至不重要吗?
其他问题:
Cra*_*ger 10
您正在使用大量并发连接.PostgreSQL将浪费大量时间用于管理和处理并发查询.所有并发工作都将争夺CPU和缓冲空间,自旋锁上会有很多争用,而且一般都是一团糟.
在8核机器上,如果您主要受CPU限制,则可能不应该有超过20个正常工作的连接.如果你的I/O有限,你可以走得更高,但350只是荒谬的.
如果可能的话,将PgBouncer放在PostgreSQL实例前面的事务池模式中,这样查询就会排队并快速执行,而不是慢速并行执行.
请参阅数据库连接数(Pg wiki).
此外,PostGIS可能非常耗费CPU.它有时需要进行非常复杂的计算.我建议使用该auto_explain模块记录长时间运行的查询,并使用pg_stat_statements/ pg_stat_plans记录占用资源的内容.检查这些查询以查看它们是否需要改进.
你的idle in transaction会话也必须处理.根据他们为什么闲置以及他们是否有交易ID,他们可能会导致严重的表格膨胀.他们还在PostgreSQL中创建了不必要的信令开销,因为它必须与积极做事的后端进行更多的协调.最后,自己开放交易的数量增加了一些内部管家操作的成本.
所以.如果减少连接数,将PgBouncer置于事务池模式中并修复这些空闲连接,则数据库可能会表现得更好.
| 归档时间: |
|
| 查看次数: |
1574 次 |
| 最近记录: |