Как выполнить откат к MySql-запросу cron, который выполняется слишком долго - PullRequest
0 голосов
/ 04 января 2012

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

Моя проблемачто мне нужно, чтобы предотвратить ситуацию, когда запрос занимает больше 5 минут и сталкивается со следующим запланированным запуском хранимой процедуры.Так как я выполняю этот запрос в транзакции, в идеале я бы просто выполнял откат где-то в хранимой процедуре, когда истекли пять минут.Возможно ли это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 04 января 2012

Метод «грубой силы» будет иметь таблицу с «заданиями». Каждый ряд будет иметь время начала и время окончания. Ищите самое последнее время начала, которое не имеет времени окончания. Если ваша следующая работа хочет начать работу, а время окончания не указано, убейте предыдущую работу.

Вы могли бы даже поместить там идентификатор процесса.

0 голосов
/ 05 января 2012

В итоге я просто заметил время начала в начале процедуры, затем после каждой обрабатываемой записи выполняю коммит и вычисляю истекшее время. Если оно превышает заданное значение тайм-аута, я перерываю и заканчиваю процедуру.

Единственный возможный сбой будет, если логика (вставка) в цикле while хранимой процедуры займет слишком много времени, но это маловероятно. Я объявил некоторые обработчики выхода, чтобы уменьшить эту возможность (они выполняют ROLLBACK).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...