У нас возникают проблемы с пользователями, выполняющими запросы / просмотры в Drupal, которые иногда приводят к зависанию нашего сайта. Замораживание происходит из-за того, что запрос приводит к тому, что число подключений к базе данных увеличивается до 400+, и в основном каждый раз, когда сайт переходит более 100 подключений к базе данных, сайт ужасно замедляется и просто не отвечает.
Мы запускаем Amazon RDS, используя MySQL Red Hat Linux
У нас достаточно большой EC2 на сервере приложений и достаточно большой RDS.
Теперь мы решаем эту проблему, чтобы найти ошибочный запрос и убить его. Как только запрос убит ... количество подключений к нашей базе данных падает до 20, что является нормальным показателем, который вы видите при мониторинге статистики сайта.
Есть ли способ остановить ошибочный запрос и завершить его до того, как он запустится слишком долго и использует соединения? Я пытаюсь автоматизировать уничтожение плохого запроса до того, как это произойдет, или, по крайней мере, через 30 секунд понять, что это плохой запрос, и уничтожить его.
источник
Ответы:
Вот хранимая процедура, чтобы убить долго работающие SELECT
Чтобы убить SELECTs, работающие дольше 30 секунд, вы запускаете эту
Если вы хотите увидеть разрыв соединений, запустите
Возможно, вы можете создать событие MySQL для вызова этой хранимой процедуры каждую минуту.
Если Amazon не позволяет вам иметь привилегию EVENT , вам придется написать сценарий внешней оболочки на сервере EC2, чтобы подключиться к БД и запустить хранимую процедуру. Этот сценарий оболочки может быть помещен в crontab.
Если Amazon не позволяет вам иметь привилегии PROCESS и SUPER , вам может потребоваться переместить БД из RDS в другой экземпляр EC2, на котором выполняется MySQL, для этого. Затем вы можете создать событие MySQL без ограничений хостинга Amazon.
источник