我不知道如何在“高流量项目”中识别Mongo性能问题。
这是一个MERN堆栈项目,其中Mongo通过使用MongoDB Atlas cloud部署在AWS上。所有查询都由Heroku服务器运行,该服务器运行在启用了自动缩放的Performance L-dyno上。
有2个数据库,约80个集合。1个集合约有13万条记录,4-5个集合有大约40 k-80 k条记录,其他集合有不到5 k条记录。我尝试测试一个生成约110个mongo查询的用户流。基于DataDog跟踪的所有mongo spans,我估计约110个查询。所有这些mongo跨度的持续时间在50 ms-我在JMeter中创建了一个测试套件,其中我使用500个虚拟用户测试了此流程,其中加速期为60秒。当我运行此测试时,mongo spans have extremely long duration >30s和它们会导致服务器上出现请求超时错误。
我尝试将Mongo Atlas环境升级到M200(我尝试了General选项和Local NVMe SSD),我也尝试了M300。它没有帮助,Mongo的跨度持续时间太长。当测试运行时,我没有注意到Mongo Atlas -〉真实的监视器中的任何尖峰。CPU与磁盘利用率低于5%。当我运行测试时,我看到它失败了,我停止测试并检查DataDog中的跟踪,DataDog中没有超过1000个mongo跨度(查询)。
当我打开Mongo Atlas Profiling View时,我可以看到在测试运行时查询执行时间有点慢,但大多数查询都丢失了。您知道为什么性能分析视图丢失了一些查询,并且没有显示我在DataDog中看到的超过30秒的慢速查询吗?
在强大的环境中,M200/M300怎么可能无法在一分钟内处理少于5万个查询和少于15万条记录的集合?
您知道我如何确定Mongo服务器的问题吗?Here和here是Metrics视图的屏幕截图,您可以在其中看到在M200配置上运行测试时出现的一些峰值。
在performance advisor中有3 recommendations可以添加一个索引到3个集合中。你认为这是Mongo服务器如此慢的原因吗?
1条答案
按热度按时间dfuffjeb1#
只需找出Heroku服务器的问题。即使您使用性能dynos自动缩放,Heroku服务器也无法处理大量请求。您只需使用更多dynos。Heroku服务器在负载测试中被阻塞。我只是不明白为什么如果mongo查询没有执行,DataDog会显示很长的mongo跨度。当我检查mongo日志时,查询丢失。