如何增加缓冲数据限制?


16

在Ubuntu中,我创建了一个包含100万条记录的MongoDB Db集合,并且尝试对其执行排序命令时,出现以下错误:

 "$err" : "Runner error: Overflow sort stage buffered data usage of 33555002 bytes exceeds internal limit of 33554432 bytes",
 "code" : 17144

请谁能描述如何增加内部限制,以便我可以对数据执行此限制和其他一些大规模命令?


我怀疑你可以。问题可能出在您的陈述上:EXPLAIN是否显示您正在使用INDEX?如果不是,则需要向表中添加一个INDEX。
Rinzwind 2014年

嗨,林兹温德。我正在尝试比较性能,因此我希望使用noindex,主索引和辅助索引来运行各种数据。您是否建议没有索引就无法运行这种规模的规模?
Jon295087

啊。好吧,我倾向于通过使用EXPLAIN来检查性能(一旦EXPLAIN不会给我低记数的记录,那么性能就会很差)。如果要这样做,可能需要限制记录。
Rinzwind 2014年

我发现MongoDB可以处理此数据集中的大约25000个文档,但是有更大的不足……我想这仅仅是数据库的局限性吗?谢谢您的意见。
Jon295087

Answers:


23

发生这种情况的原因可能是SERVER-13611之类的错误(因此请确保您使用的是最新版本),或者是因为您尝试对2.6中的稀疏索引进行排序,但通常是因为您也只是尝试进行排序内存中的许多记录没有索引。

您达到的特定限制是有意的,在此处记录 -无法更改,因此您需要减少结果集或使用索引等来执行排序。

更新(2014年11月):即将发布的2.8版本(在撰写本文时为2.8.0-rc0)现在允许对该设置进行调整,如下所示:

db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: <limit in bytes>})

默认值为32MiB(33554432字节),应谨慎调整-较大的内存排序可能导致数据库停止运行(这就是为什么首先要限制的原因)。


“ errmsg”:“未找到要设置的选项,请使用help:true查看选项”
Mohammad Efazati

1
可能您使用的版本与此答案的目标版本有很大不同,这是在很早以前写的
Adam C

2

在对20万条以上的记录进行排序和分页时,我也遇到了这个问题。最简单的解决方案似乎是添加索引(针对要排序的属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.