Автоматическое уничтожение / тайм-аут медленных запросов в MySQL
Есть ли какая-либо конфигурация, которая может быть выполнена на стороне MySQL для автоматического завершения или тайм-аута запросов, которые являются чрезвычайно медленными, например, 100 секунд
3 ответа
Вы можете перечислить все ваши запросы MySQL с помощью следующей команды:
$ mysqladmin processlist
так что вы можете запустить какой-нибудь скрипт, который будет анализировать этот список и убить конкретный запрос.
Например, вы можете запустить какой-нибудь скрипт на любом языке через cron, чтобы периодически проверять длинные запросы, например:
$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
$process_id=$row["Id"];
if ($row["Time"] > 200 ) {
$sql="KILL $process_id";
mysql_query($sql);
}
}
Другой пример:
mysql> select concat('KILL ',id,';') from information_schema.processlist
where user='root' and time > 200 into outfile '/tmp/a.txt';
mysql> source /tmp/a.txt;
Связанные с:
Прочитайте больше:
Начиная с MySQL 5.1, вы можете создать хранимую процедуру для запроса таблицы information_schmea.PROCESSLIST по всем запросам, которые соответствуют вашим критериям ("длительное время выполнения" в вашем случае). Запрашивая таблицу процессов, вы можете просто перебрать курсор, чтобы убить запущенные процессы запросов, которые превышают ваши критерии времени ожидания.
Посмотрите на следующий пример: Процедура поиска и завершения всех запросов не-SUPER и "системная учетная запись", выполняющихся дольше, чем N секунд
Вы должны проверить команду pt-kill из набора инструментов Percona