MongoDB: Получение предупреждения "Client Cursor :: yield не может разблокировать ч/б рекурсивной блокировки" при использовании findAndModify в двух экземплярах процесса

Я использую: MongoDB 1.6.4, Python 2.6.6, PyMongo 1.9, Ubuntu 10.10

Я получаю предупреждение "Client Cursor :: yield не может разблокировать b/c рекурсивной блокировки" в моих журналах очень часто при использовании findAndModify в двух экземплярах процесса. При использовании только одного процесса предупреждение не появляется.

Как я могу это исправить?

** Обновление 8 марта 2013 г. **

Есть ли решение этой проблемы на данный момент?

Ответы

Ответ 1

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

Я не знаю технических деталей этого но из моего опыта добавления индекс в поле запроса. проверить у вас есть индекс по полям, которые используются в запросить часть findAndModify. также запускается db.collection.find(). объяснить() чтобы проверить, использует ли он индекс.

Благодаря pingw33n, которые помогают решить этот вопрос.

Ответ 2

Монголы говорят, что вы можете игнорировать это предупреждение - см. поток . Он имеет дело с двумя процессами, пытающимися получить доступ к мьютексу (следовательно, вы видите его только с несколькими экземплярами процесса)

Мы определенно знаем об этой проблеме - мы обсуждаем лучший способ для обработки этих сообщений. Ложные записи журнала должны быть устранены в новом выпуске очень скоро.

Относительно ответа @Creotiv. Да, если что-то медленное - 90% времени, когда вам не хватает индекса