问题描述
|
我运行一个mongodb实例,该实例正与来自应用服务器的日志一起插入。当前生产中的刀片插入率为每秒10个刀片插入。及其封顶的收藏。我不使用任何索引。当记录数较少时,查询运行速度更快。只有一个集合具有该数量的数据。即使从具有很少行的集合中查询也变得非常慢。是否有任何方法可以改善性能。
-阿维纳什
解决方法
这是一个很难回答的问题,因为我们对您的配置或文档结构了解不多。
突然出现在我脑海中的一件事是您的内存不足。每秒10次插入并不重要,因为我们不知道插入的文档有多大。
如果以每秒10个的速度插入较大的文档,则可能会耗尽内存,导致操作系统将某些记录推入磁盘。
在不使用索引的情况下进行查询时,将不得不扫描每个文档。如果您的文档已被操作系统推送到磁盘,您将开始出现页面错误。 Mongo将需要从硬盘上获取数据页面,并将它们加载到内存中,以便可以对其进行扫描。在执行此操作之前,操作系统将需要通过将内存的其他部分刷新到磁盘来为内存中的数据腾出空间。
听起来您是受I / O约束的,并且可以解决此问题的两件事是
向运行ѭ0的计算机添加更多内存
开始使用索引,以便数据库不需要执行完整的集合扫描
, 使用适当的索引,尽管这会影响上限集合中的插入效率。
如果您可以共享集合结构和正在使用的查询,那就更好了。