gpt4 book ai didi

ruby-on-rails - 为什么我的 PostgreSQL 服务器 cpu 受限?

转载 作者:行者123 更新时间:2023-11-29 11:52:29 29 4
gpt4 key购买 nike

我的数据库非常受 cpu 限制,我找不到问题的根本原因。我目前有两个应用程序服务器,每个服务器都有一个 Rails api,通过 ruby​​-pg gem 连接到 PostgreSQL。两个应用程序服务器也有 sidekiq 运行后台作业,我有一些支持服务器通过 sidekiq 处理来自全国提要的新帖子。如果我的内存不足,解决方案似乎很简单。有什么关于我受 CPU 限制的一般想法吗?

数据库规范:

  • Rackspace 8GB 性能层云虚拟机(8GB RAM、8 个核心 CPU、SSD)
  • Debian 7 Wheezy Linux 操作系统
  • 带有 PostGIS 扩展的 PostgreSQL 9.1

可能出现的问题:

  • PostgreSQL 9.1 在索引方面表现不佳

数据库有近 10GB 的索引。我打算将我的数据库升级到 PostgreSQL 版本 >= 9.2。在 9.2 版中,引入了仅索引扫描。

  • 连接太多

在 postgresql.conf 中,我将最大连接数设置为“500”。通常全天仅使用 175 个连接,但在高峰时段,sidekiq 任务会将当前连接增加到 350 个。8GB 服务器实例建议使用多少个连接?

  • 偶像关系

当我查看 psql 控制台中的 pg_stat_activity 时,我发现 sidekiq 留下了很多 IDLE 连接。这些连接会导致 CPU 膨胀吗? API 或 sidekiq 中是否存在修复?

  • 需要更强大的服务器

也许没有错误。我可能需要简单地增加服务器实例。同样,如果我受限于内存,这会更有意义。但是,应用程序服务器和 3 个支持的 sidekiq 服务器都是 4gb 性能层实例。本质上,与数据库交互的服务器结合了数据库资源的两倍以上。这有关系吗?

其他问题:

  • 我应该使用哪些工具/技术来解决问题?
  • postgresql.conf 中是否有任何与 cpu 使用相关的基本设置?
  • 是否有任何与 rails、sidekiq 或 pg gem 相关的已知问题可能是一个促成因素? (我还没有看到任何 Unresolved 问题。)
  • 是否有任何关于 CPU 使用率的通用 postgreSQL 指南?
  • 还有其他可能有助于我的搜索的想法吗?

最佳答案

您正在使用过多的并发连接。 PostgreSQL 将在管理和处理并发查询上浪费大量时间。所有的并发工作都将争夺 CPU 和缓冲区空间,对自旋锁的竞争会很激烈,而且通常都会一团糟。

在 8 核机器上,如果您主要受 CPU 限制,则您可能不应该有超过 20 个事件连接。如果您的 I/O 受限,您可以更高,但 350 太荒谬了。

如果可能,在您的 PostgreSQL 实例前面放置一个处于事务池模式的 PgBouncer,这样查询就会排队并快速串行执行,而不是缓慢地并行执行。

参见 number of database connections (Pg wiki) .

此外,PostGIS 可能非常占用 CPU。它有时需要做非常复杂的计算。我建议使用 auto_explain 模块来记录长时间运行的查询,并使用 pg_stat_statements/pg_stat_plans 来记录什么占用了资源。检查这些查询以查看它们是否需要改进。

您的 idle in transaction session 也必须得到处理。根据它们空闲的原因以及它们是否具有事务 ID,它们可能会导致严重的表膨胀。他们还在 PostgreSQL 中产生了不必要的信号开销,因为它必须与正在积极做事的后端进行更多协调。最后,开放交易的数量本身增加了一些内部管理操作的成本。

所以。如果您减少连接数,将 PgBouncer 置于事务池模式前面,并修复那些空闲连接,您的数据库可能会表现更好。

关于ruby-on-rails - 为什么我的 PostgreSQL 服务器 cpu 受限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672453/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com