Нотификатор окончания запроса MySQL

Рубрика: Development, MySQL | 6 May 2007, 19:35 | Vadim Voituk

Думаю любому, кто хоть как-то работает с СУБД MySQL, приходилось выполнять запросы, которые обрабатывают огромные массивы данных и в результате их время выполнения достигает нескольких часов, а иногда и суток.
Чаще всего без предварительных тестов оценить время выполнения такого запроса нереально, а ещё чаще такие тесты проводить некогда.
Потому в какой-то момент я написал небольшой нотификатор, какой уведомляет меня по емайл об окончании выполнения такого запроса:

#!/bin/sh
my_user='my-mysql-user'
my_pswd='my=mysql-passwd'

pid=$1
if [ "$pid" = "" ]
  then
    echo "Usage: $0  "
    exit
fi

echo Waiting for process $pid
qty=`mysqladmin -u$my_user -p$my_pswd processlist | grep  $pid | grep -c Query`
while [ $qty -gt 0 ]
  do
    qty=`mysqladmin -u$my_user -p$my_pswd processlist | grep  $pid | grep -c Query`
    echo -n "."
    sleep 10
  done

date | mail -s "MySQL: Connection-Id: $pid DONE" $2
echo "Done"

запускается просто:
./mysql_notifier Connection-Id email
Где
Conection-Id – ID подключения в каком исполняется запрос (можно узнать командой show processlist)
email – Адрес, на который прийдет письмо-уведомление об окончании исполнения.

Если будут вопросы по работе скрипта – пишите, отвечу.

Комментариев: 2

2 Responses to “Нотификатор окончания запроса MySQL”

Комментарии:

  1. Скакунов Александр

    Гм, интересно…
    А какого рода запросы ты так пускаешь?
    У меня всё как-то просто – селектики для вывода страницы, а у тебя, как я посмотрю, целая система с нотификациями… Ух!

  2. vadim

    Обычно долго отрабатываются запросы для формирования сложных отчетов или статистических выборок за длительные периоды времени.
    При этом анализируются порядка 100-200 млн записей, а в некоторых случаях и 400.

Leave a Reply