【问题标题】:PHP MongoDB performance dropPHP MongoDB 性能下降
【发布时间】:2016-07-26 09:24:19
【问题描述】:

您好,首先感谢您提供任何指导。

最近我开始遇到我运行的服务出现问题,该服务在高峰时段出现 503 错误。我在 PHP(5.4) / MongoDB(2.4) 驱动的 API 中运行该服务。在高峰时段延迟期间附加 mongostat 和 mongotop。

mongostat 和 mongotop 上的时间戳并不完全在同一时间范围内,但它们确实发生在同一停机时间段内,我认为可以安全地假设它是一个有效的表示。

该平台托管在 Openshift(Web 服务器和数据库)中。

我觉得奇怪的是连接数量和 (qr|ar) 与正在执行的查询数量。考虑到在这种情况下使用索引是最佳的(idx miss % 为零?)。

我可能误解了输出,但问题可能出在哪里? php mongodb 驱动程序和打开的连接数? php应用源码有缺陷?

有没有人遇到过类似的问题?最好的做法是什么?

我正在考虑增加允许的最大连接数,但 MongoDB 默认似乎更高,我认为这不会有帮助。我也不知道如何处理排队等待读取的大量客户端以及当执行的查询量较低时的高活跃读取峰值。

再次感谢您。

【问题讨论】:

  • 你在使用 Oplog 吗?
  • 不,我们没有使用 oplog。数据库既不分片也不复制。

标签: php mongodb performance openshift


【解决方案1】:

原来这是一个糟糕的索引问题。如果您检查顶部的 mongostat,您会看到每秒完成 1-100 个查询,我们打开了超过 400 个连接,并且有一个巨大的 qr 请求。通过检查与最常用集合相关的查询(检查 mongotop),我们发现在我们的 push_notifications 集合中存在被错误值索引的查询。 php mongo 驱动程序出于某种原因(仍然未知)开始创建连接并且查询被排队,内存达到峰值并且系统整体变得缓慢。

在修复代码并重新排序代码中的查询字段并在数据库中插入适当的索引后,我们开始看到更好的性能并且没有连接溢出。

结论:在 PHP 中使用 mongostat 和 mongotop 来分析哪些是最常用的集合,检查您的代码并尝试优化索引和查询字段的顺序。

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 2013-09-05
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多