我正在运行一个使用mongo分片群集的节点(0.10.26)应用程序。我使用三个成员副本集作为分片。以下是我的其他配置详情
硬件和操作系统设置
应用程序的加载模式
蒙戈
我的应用程序提供了一个界面,可以将日志记录下载为带有特定过滤器的csv文件。当我尝试csv下载时,应用程序变得非常慢。
经过一番调查后,我得出结论,对日志的查询需要很长时间(> 2分钟,有时长达10分钟) 由于数据库响应缓慢,应用程序也很慢
问题
为什么查询日志需要很长时间。
如果我做一个explain(),我会看到它命中了索引。
mongostat(以1秒延迟运行时)表示存在 发生了很多页面错误(~800-1100)/秒。这页纸 查询返回后,故障会消退。后续查询返回 在几秒钟内。
工作集+索引大小= 3.7 G
RAM = 7.5 G。
日志集合的大小= 50 G
频繁写入日志集合是否会影响读取操作 在同一个集合上。这种担忧是否适用于我的工作量?
答案 0 :(得分:0)
根据我的很多事情,我们需要在这里考虑解决问题。我不确定Mongo方面到底发生了什么,但是我会看到一些事情,
----如果它太大,那么我可能认为您正在使用游标来获取数据,然后将其写入可能是IO密集型的文件(页面错误可以证明这一点。)。除此之外,您还可以查看专为高效批量操作而设计的MongoExport和MongoDump选项。
----检查过滤效率。虽然你说你正在使用索引而查询正在使用索引。还是可以添加更有效的新索引吗?如果是,请添加它。
----如果答案是肯定的,那么他们真的需要吗?如果答案为否,则尝试仅获取所需数据。避免不必要的处理
----对于日志,一般搜索过滤器(日期,错误等)是什么?在NoSQL Dbs中,首先要确定需求/查询/过滤器,然后再确定模式/集合等。如果你没有考虑那个,那么它是时候因为你的数据库大小很小。一旦它成长,你就不能在以后再做。
希望这有帮助:)