Автоматическое уничтожение / тайм-аут медленных запросов в 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 секунд

http://forge.mysql.com/tools/tool.php?id=106

Другие вопросы по тегам