MongoDB: Получение предупреждения «Client Cursor :: yield не может разблокировать ч / б рекурсивной блокировки» при использовании findAndModify в двух экземплярах процесса - PullRequest
15 голосов
/ 21 января 2011

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

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

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

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

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

Ответы [ 2 ]

22 голосов
/ 24 января 2011

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

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

Спасибо pingw33n , которые помогут решить этот вопрос.

2 голосов
/ 07 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...