2017-02-15 10 views
0

Ранее я заметил, что записи sqlite db значительно быстрее, когда я обертываю атомную транзакцию (django) - 0,3 секунды без и 0,004 секунды с транзакцией. Следовательно, я применял транзакции по всему проекту. Странно после этого я начал сталкиваться с ошибкой «база данных заблокирована», которая заставила меня отлаживать ее, чтобы выяснить, что, когда обновление выполняется над транзакцией (позволяет вызвать обновление A), и когда я пытаюсь одновременно запускать другое обновление (B) по транзакции, то он не работает мгновенно, не дожидаясь таймаута (по умолчанию 5 секунд). Но когда я попробовал запустить обновление B без транзакции, он ждал завершения A, а затем завершил обновление. Может ли кто-нибудь предоставить мне возможное объяснение этому, которое не включает удаление транзакций.Ошибка «База данных заблокирована» при использовании sqlite3 во время атомных транзакций

ответ

0

Тайм-аут SQLite может быть установлен с PRAGMA busy_timeout.

Значение по умолчанию равно нулю, и эти параметры применяются только к соединению (а не к базе данных), поэтому похоже, что не все соединения получили эти 5 секунд.

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