почему django оставляет в MySQL замки? - PullRequest
8 голосов
/ 21 июня 2010

У меня есть приложение Django, которое использует MySQL и движок InnoDB для хранения. По какой-то причине Django иногда оставляет блокировки на месте, даже после завершения запроса. (Я вижу их с помощью Innotop).

Единственный способ обработки транзакций, который я делаю в своем коде, заключается в том, что у меня есть django.db.transaction.commit_on_success, указанный для некоторых моих методов save (), где я работаю с многостольным наследованием.

Если я перезагружаю сервер Apache, блокировки исчезают.

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

1 Ответ

1 голос
/ 21 июня 2010

Единственный раз, когда мне удалось это сделать, это настроить «запланированные» задачи в Django, которые не были связаны с запросами / представлениями. Система обработки транзакций с автоматической фиксацией по умолчанию фиксирует транзакции только тогда, когда пара запрос / ответ завершена и отправлена ​​обратно конечному пользователю, поэтому создание заданий kron-esque, которые выполняются без отправки запроса, обходит этот механизм.

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

...