Django создает постоянные соединения при запуске, даже если для CONN_MAX_AGE установлено значение 0 - PullRequest
0 голосов
/ 28 апреля 2019

У нас недавно MySQL Server исчез из-за ошибки.После недели отладки мы выяснили, что Django создавал несколько постоянных соединений при запуске, хотя наш CONN_MAX_AGE был 0 (всегда был 0).

Запросы, которые выполнялись при запуске, были запросами от django-simple-история и несколько запросов на уровне класса моделей форм.Поскольку эти формы каким-то образом попадали в импорт URL, следовательно, эти запросы выполнялись для всех вызовов (я знаю, очень плохо, мы исправили это).Теперь странное поведение было следующим:

при запуске эти запросы уровня класса и запросы из django-simple-history будут создавать соединения с MySql, но они будут постоянными соединениями.Несколько запросов были запущены для этих соединений во время запуска.Теперь после запуска все запросы будут создавать свои соединения отдельно от запросов из моделей.Они возвращались и пытались соединиться, используя старые соединения.

Как мы получили ошибку, было то, что, если приложение бездействовало в течение wait_timeout MySql.MySql прервал бы эти соединения, и django попытался бы сделать запрос, используя то же самое соединение, следовательно, «сервер MySQL ушел»

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

...