MongoError: OperationFailed: операция сортировки используется больше, чем максимальная 33554432 байт ОЗУ [дубликат]

Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result является undefined в вашем примере кода.

64
задан William Price 16 May 2015 в 06:22
поделиться

6 ответов

Вы используете ограничение 32 МБ для сортировки в памяти:

https://docs.mongodb.com/manual/reference/limits/#Sort-Operations

Добавьте индекс в поле сортировки. Это позволяет MongoDB передавать вам документы в отсортированном порядке, а не пытаться загружать их все в память на сервере и сортировать их в памяти перед отправкой их клиенту.

92
ответ дан A. Jesse Jiryu Davis 1 September 2018 в 07:37
поделиться

Как сказано в kumar_harsh в разделе комментариев, я хотел бы добавить еще одну точку.

Вы можете просмотреть текущее использование буфера, используя приведенную ниже команду в базе данных admin:

> use admin
switched to db admin
> db.runCommand( { getParameter : 1, "internalQueryExecMaxBlockingSortBytes" : 1 } )
{ "internalQueryExecMaxBlockingSortBytes" : 33554432, "ok" : 1 }

Он имеет значение по умолчанию 32 МБ (33554432 байт). В этом случае у вас недостаточно данных буфера, поэтому вы можете увеличить ограничение буфера с помощью своего собственного оптимального значения, например, 50 МБ, как показано ниже:

>  db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes:50151432})
{ "was" : 33554432, "ok" : 1 }

Мы также можем установить этот предел на постоянной основе с помощью приведенного ниже параметра в файле конфигурации mongodb:

setParameter=internalQueryExecMaxBlockingSortBytes=309715200

Надеемся, что это поможет !!!

Note: Эти команды поддерживают только после версии 3.0 +

28
ответ дан JERRY 1 September 2018 в 07:37
поделиться

Если вы хотите избежать создания индекса (например, вы просто хотите быстро и грязную проверку для изучения данных), вы можете использовать агрегацию с использованием диска:

all_reviews = db_handle.aggregate([{$sort: {'reviewDate': 1}}], {allowDiskUse: true})

(Не уверен как это сделать в pymongo, хотя).

7
ответ дан poroszd 1 September 2018 в 07:37
поделиться

Синтаксис JavaScript API для индекса:

db_handle.ensureIndex({executedDate: 1})
0
ответ дан Prashant Pokhriyal 1 September 2018 в 07:37
поделиться

решена с индексированием

db_handle.ensure_index([("reviewDate", pymongo.ASCENDING)])
16
ответ дан sheetal_158 1 September 2018 в 07:37
поделиться

В моем случае было необходимо исправить индексы nessary в коде и заново их создать:

rake db:mongoid:create_indexes RAILS_ENV=production

Поскольку переполнение памяти не происходит, когда есть необходимый индекс поля.

PS До этого мне пришлось отключать ошибки при создании длинных индексов:

# mongo
MongoDB shell version: 2.6.12
connecting to: test
> db.getSiblingDB('admin').runCommand( { setParameter: 1, failIndexKeyTooLong: false } )
1
ответ дан shilovk 1 September 2018 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: