Назад | Перейти на главную страницу

Таблица django_session убивает мой сервер MySQL и приложение django

Мне нужна ваша помощь. У меня есть приложение Django, которому около 7 лет, и которое сейчас деградирует .. каждый раз, когда веб-сайт отключается и восстанавливается, проблема связана с сервером mysql

Обычно мне нужно просто перезапустить сервер mysql, и он возвращается ... я делаю это уже 2 года и готов исправить проблему раз и навсегда, и для этого нужна ваша помощь

Вот скриншот таблиц базы данных

В django_session столы 3,512,729,600 длина данных и 24,152,301 rows Я предполагаю, что именно здесь возникает проблема и почему веб-сайт иногда просто умирает, когда mysql не может обработать запрос и несколько тайм-аутов, которые убивают приложение. Если это что-то еще, просветите меня, пожалуйста.

В любом случае я попытался удалить django_session таблица, но без везения я получаю следующие ошибки

Ошибка в запросе (1451): невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено (font_database.fonts_fontfile, ОГРАНИЧЕНИЕ session_id_refs_session_key_37e5d4124e1e319f ВНЕШНИЙ КЛЮЧ (session_id) ССЫЛКИ django_session (session_key))

Что мне здесь делать? Здесь нужна серьезная помощь

Версия MySQL 5.7.23

Если вам нужна дополнительная информация, спросите меня, и я постараюсь добавить ее к этому вопросу.

Спасибо

ОБНОВИТЬ:

Только что заметил, что проблема заключается в том, что общее количество подключений на сервере MySQL максимально равно 152.

mysql> show status where `variable_name` = 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 152   |
+-------------------+-------+
1 row in set (0.74 sec)

Также, когда я проверяю соединения, они все из django_sessions, поэтому, когда я перезапускаю сервер, он работает нормально, но затем возвращается к той же проблеме, поскольку таблица сеансов слишком высока и слишком много строк

mysql> show processlist;
+------+--------------------+-----------+--------------------+---------+------+--------------+----------------------------------------------------------------------------------------------------+
| Id   | User               | Host      | db                 | Command | Time | State        | Info                                                                                               |
+------+--------------------+-----------+--------------------+---------+------+--------------+----------------------------------------------------------------------------------------------------+
| 3709 | font_database | localhost | font_database | Query   | 3164 | Sending data | SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2019-02-23 13:00:37' |
| 3710 | font_database | localhost | font_database | Query   | 3162 | Sending data | SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2019-02-23 13:00:39' |
| 3711 | font_database | localhost | font_database | Query   | 3161 | Sending data | SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2019-02-23 13:00:41' |
| 3714 | font_database | localhost | font_database | Query   | 3133 | Sending data | SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2019-02-23 13:01:09' |
| 3716 | font_database | localhost | font_database | Query   | 3131 | Sending data | SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2019-02-23 13:01:11' |
| 3717 | font_database | localhost | font_database | Query   | 3129 | Sending data | SELECT COUNT(*) FROM `django_session` WHERE `django_session`.`last_login` >= '2019-02-23 13:01:13' |
...
...
till maxed to 152 connections

Опять же, если вам нужна дополнительная информация, спрашивайте, и я ее предоставлю. Это все, что я считаю, может помочь понять, в чем проблема.

У вас слишком много просроченных сеансов за эти 7 лет. Вы можете попробовать manage.py clearsessions https://docs.djangoproject.com/en/2.2/topics/http/sessions/#clearing-the-session-store

Django не обеспечивает автоматическую очистку просроченных сеансов. Поэтому ваша задача - регулярно очищать просроченные сеансы. Django предоставляет для этой цели команду управления очисткой: clearsessions. Рекомендуется вызывать эту команду регулярно, например, как ежедневное задание cron.