如何优化 Postgres 和 Discourse 数据库

  • 有时数据库会因某些查询而被禁用,我们被告知需要优化 PostgreSQL,有什么方法可以实现吗?
    下图是我们的数据库资源
  • CPU:4 个 vcpu
  • 内存:22 GB

1 个赞

大家好,我正在与 @Abdelrahman_MoHamed 一起处理这个问题。我们最近将一个拥有约 50 万个主题和 350 万用户的网站迁移到了 discourse。我们是在 GCP 上自托管的。在此过程中,协助我们迁移的合作伙伴提到,优化 Postgres 以获得数据库的适当性能可能是有意义的。我们的假设是,数据库开箱即用,已经为 discourse 进行了优化(也许是这样?)。但是,鉴于他们的(合作伙伴的建议),我们想在这里跟进一下。

长话短说,对于像这里显示的这些数量的数据库,这些是优化 Postgres 的一些常见方法吗?

提前感谢您的帮助!

1 个赞

您是否有更多详细证据表明数据库是限制因素,还是导致这些 CPU 负载的原因?例如 ps 或 top 的输出。

如果确实是数据库,我想应该有办法询问它正在处理哪些查询。

这些细节可能很有帮助。

1 个赞

感谢 @Ed_S,我们很快会在这里添加更多数据。目前只是在监控情况。感谢您的回复。

1 个赞

这似乎确实是一个奇怪的组合……22GB内存但只有4个vCPU?内存过剩,但核心可能太少。

通常情况下,您会有一个vCPU/GB比例高得多的服务器。

这是因为Web服务是高度并行的,每个Unicorn只需要大约1GB。

我相信每个Unicorn都可以运行在不同的核心上。

这也许就是为什么您如此容易达到100%的CPU利用率。

我建议您考虑迁移到16/16或甚至8/8的配置,看看情况是否有所改善。

小的旁路(sidestep)是否允许?独角兽(unicorns)和 PHP 的工作者(workers)是相似的东西吗?一些文档试图解释说,独角兽实际上是具有自己工作者来处理请求的 HTTP 服务器,并且因此与 Ruby 完全不同。但两者都处理 HTTP 请求,允许更多并发请求,因此需要更多的 PHP 工作者,而更多的独角兽需要更多的 RAM——对我来说,这两者几乎是相同的。

对还是错?我想理解这个原理,因为我知道为什么、何时以及如何调整 PHP 工作者,但独角兽对我来说只是神秘而神奇的生物。

是的,我认为这是一个公平的比较。

1 个赞

相关:管理员如何知道他们的独角兽数量相对于网络流量来说是太少还是太多?

相关:管理员如何知道他们的内存(RAM)是否过多?

我的理解是,独角兽的数量通常根据 CPU 的数量进行扩展,但并非必须如此——例如,如果主机配置自设置以来发生了更改。

内存量应根据需要量进行扩展。我不知道大量导入许多帖子和用户是否必然意味着需要更多内存——问题在于,为了响应每个 Web 请求或每个常规任务,需要访问多少数据库?

对我来说,10 分钟的 CPU 最大使用量爆发,而背景使用量非常低,这并不表示存在问题。(如果这意味着一个非常繁忙且对时间要求很高的论坛,例如体育/博彩论坛,在高峰兴趣时段出现页面响应延迟,那将是一个问题。但我的论坛不是对时间要求高或对性能要求高的。)

我不知道如何可以制表列出最近响应时间的范围,但这可能是一个值得关注的好数据。可以从 Web 服务端或数据库服务端获取。

1 个赞