MySQL: Боремся с запросами, которые не выполняются


Обратился заказчик с интересной задачей. Разобраться почему перестали приходить смс-рассылки клиентам.

Примерный алгоритм работы был таков. По крону запускался скрипт, который выбирал по заранее известным критериям клиентов и отправлял каждому клиенту через SMS-гейт уведомления с нужным текстом.
Первым делом были изучены логи, в которых ничего толкового не было найдено.
Через консоль запрос выполнялся отлично. И несколько тестовых записей тоже срабатывали без каких-либо отклонений.
После был проведен анализ результата выдачи запроса на предмет “специальных символов”, которые могли бы портить работу. Но и тут все было корректно. Но именно этот анализ позволил выяснить причину.
Все дело в том, что первый запрос на выборку выбирал примерно 500000 позиций и для каждой позиции на PHP уже анализировался и подбирался нужный текст по определенным шаблонам регулярных выражений. Работа скрипта занимала достаточно много времени. Накапливалась переменная собиравшая все в один большой запрос для добавления его на сервер, который во время работы скрипта попросту закрывал соединение т.к. оно превышало допустимое значение.
Итак:

set wait_timeout=250;

Как видно из конфига – 250 секунд – это время, которое сервер ожидает обращений к нему после последнего запроса.
Таким образом после первый выборки, время работы PHP скрипта занимало примерно 6 минут и сервер просто закрывал соединение.
Тут было несколько решений. От увеличения wait_timeout до разбивки одного большого INSERT на несколько, что и было сделано.
Как только INSERT накапливал 100000 он сразу отправлял фоновым запросом этот пакет и продолжал собирать новый.
Само собой были пересмотрены регулярные выражения и существенно ускорена их работа.

Таким способом удалось уменьшить время скрипта и главное – восстановить работоспособность!
1с утп

Возврат % от покупок

Другие публикации:

Написать комментарий через:

 
               
  • Локальный блог
  •  
 

Ваш отзыв

Имя *

Почта (скрыта) *

Сайт

Напишите цифрами двa вoceмь двa *

Сообщение

Один отзыв на «MySQL: Боремся с запросами, которые не выполняются»

  1. Вася пишет:

    Мне написали приложение в 1С, теперь з запросами все норм

 
Статусы для соц.сетей на ArtKiev Design Studio