Как увеличить лимит буферизованных данных?

16

В Ubuntu я создал коллекцию MongoDB Db, содержащую 1 миллион записей, и при попытке выполнить для нее команду сортировки я получаю следующую ошибку:

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

Кто-нибудь может описать, как увеличить внутренний лимит, чтобы я мог выполнить эту и некоторые другие масштабные команды для данных?

Jon295087
источник
Я сомневаюсь, что вы можете. Возможно, проблема в вашем утверждении: EXPLAIN показывает, что вы используете INDEX? Если нет, вам нужно добавить ИНДЕКС в вашу таблицу.
Rinzwind
Привет Ринзвинд. Я пытаюсь сравнить производительность, поэтому я пытаюсь выполнить сортировку данных с использованием noindex, первичного индекса и вторичного индекса. Вы предлагаете, что невозможно выполнить подобную шкалу без индекса?
Jon295087
Ах. Ну, я склонен проверять производительность с помощью EXPLAIN (как только EXPLAIN не дает мне низкие показатели записи, производительность плохая). Возможно, вам придется ограничить свои записи, если вы хотите сделать это следующим образом.
Rinzwind
Я обнаружил, что MongoDB обработает около 25000 документов в этом наборе данных, но падает с чем-то большим ... Я думаю, это всего лишь ограничение базы данных? Спасибо за ваши Коментарии.
Jon295087

Ответы:

23

Это может произойти из-за ошибки, такой как SERVER-13611 (поэтому убедитесь, что вы используете последнюю версию), или из-за того, что вы пытаетесь отсортировать по разреженному индексу в 2.6 , но чаще это происходит потому, что вы просто пытаетесь сортировать слишком много записей в памяти без индекса.

Конкретное ограничение, которое вы устанавливаете, является преднамеренным и задокументировано здесь - его нельзя изменить, поэтому вам нужно уменьшить набор результатов или использовать индекс и т. Д. Для выполнения сортировки.

Обновление (ноябрь 2014 г.) . Предстоящий выпуск 2.8 (версия 2.8.0-rc0 на момент написания этой статьи) теперь позволяет настраивать этот параметр следующим образом:

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

Значение по умолчанию составляет 32 МБ (33554432 байта), и его следует корректировать с осторожностью - большие сортировки в памяти могут привести к остановке вашей базы данных (именно поэтому изначально был предел).

Адам С
источник
"errmsg": "не найдено ни одной опции для установки, используйте help: true, чтобы увидеть опции"
Мохаммад Эфазати
1
скорее всего, вы используете версию, совершенно отличную от той, для которой предназначен этот ответ, это было написано довольно давно
Adam C
2

Я столкнулся с проблемой также при сортировке и разбивке на страницы записей по 200K +. Кажется, самое простое решение - добавить индекс (для атрибутов, по которым вы сортируете).

Макс Каплан
источник