2016-07-26 146 views
1

美好的一天,首先感谢提供任何指导。PHP MongoDB性能下降

最近我开始有一个服务问题,我运行在高峰时间给503错误。我在PHP(5.4)/ MongoDB(2.4)驱动的API中运行该服务。在高峰时间延迟期间,接下来连接了mongostat和mongotop。

enter image description here

enter image description here

enter image description here

上mongostat和mongotop的时间戳是不太在同一时间,但在同一停机期间确实发生了,他们和我会考虑安全的假设,它是一个有效的表示。

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

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

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

有没有人遇到类似的问题?最好的行动是什么?

我想增加允许的最大连接数,但MongoDB的默认值似乎更高,我不认为这会有所帮助。我也无能为力,因为如何处理大量排队阅读的客户端,以及在执行查询量较低时高活动读取的高峰。

再次感谢您。

+0

你使用Oplog吗? – Dude

+0

不,我们没有使用oplog。数据库不分片也不复制。 –

回答

1

事实证明这是一个糟糕的索引问题。如果您在顶部检查mongostat,您会看到每秒完成1-100个查询,我们已经打开了400多个连接,并且有大量的请求。通过检查与最常用的集合相关的查询(检查mongotop),我们发现在我们的push_notifications集合中存在被错误值编入索引的查询。由于某种原因(不知道),php mongo驱动程序开始创建连接,查询排队,内存达到峰值,系统总体变慢。

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

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