Изменения в переменной lock_wait_timeout в MySQL не отражаются в приложении Django - PullRequest
0 голосов
/ 14 февраля 2020

Я пытался изменить переменную lock_wait_timeout в MySQL, потому что значение по умолчанию, равное 50 секундам, не подходит для моего приложения Django.

Я использовал следующие команды:

set innodb_lock_wait_timeout=2;
show variables like 'innodb_lock_wait_timeout';

Несмотря на то, что команда show переменные подтверждает, что мои изменения были внесены, время ожидания все еще составляет 50 секунд, когда мое приложение Django пытается получить блокировку на заблокированной записи.

Это фрагмент кода, который я использую для блокировки определенной записи с помощью Django:

form = Form.objects.select_for_update().filter(id = form_details[FORM_ID]).first()

Я попытался перезапустить службу MySQL и даже перезапустить весь мой система, все безрезультатно.

1 Ответ

0 голосов
/ 14 февраля 2020

MySQL переменные являются сессионными или глобальными.

'set X = y' устанавливает только сессионную переменную X. Django создает новый сеанс, поэтому не затрагивается.

Использование:

set global innodb_lock_wait_timeout=2;
show global variables like 'innodb_lock_wait_timeout';

Глобальные переменные копируются в переменные сеанса в начале соединения. Если вы хотите, чтобы это влияло только на Django, вам нужно будет что-то сделать вручную в коде в начале соединения.

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