Я выполнил запрос MySQL из командной строки, используя следующее:
nohup mysql --user=root --password=XXXXXXXXX database < report.sql > results.tab
Этот запрос является обширным (5000 строк) и выполняет сложный поиск по 90 000 000 строк из 150 таблиц.
Этот запрос выполняется более 24 часов и еще не завершен.
Есть ли способ запустить проверку статуса для этого запущенного запроса?
Что ж, вы можете войти в консоль mysql и выдать SHOW PROCESSLIST;
команда. Это покажет вам, какие запросы выполняются, но вы не получите оценку, когда эти запросы закончатся.
Если вы запускаете запросы с EXPLAIN EXTENDED
префикс заранее, который покажет вам количество элементов и другие важные детали запроса. Это может вам помочь, но, поскольку запрос выполняется, вы можете использовать другой подход, подробно описанный на странице mysqlperformanceblog.
Отрывок:
Ответ был прост, потому что на сервере больше ничего не работало. Это означает, что SHOW GLOBAL STATUS дает приблизительное представление о том, что на самом деле делает запрос. (Если бы на сервере была большая активность, я бы не смог с уверенностью сказать, что SHOW GLOBAL STATUS показывает, что делает этот один запрос; активность других запросов тоже была бы смешанной. Было бы здорово иметь возможность выбрать другой поток и наблюдать только за его статусом, но MySQL в настоящее время не позволяет вам этого делать.)
Решением было измерить, насколько быстро запрос сканирует строки при сканировании таблицы фактов. Это показано переменной состояния Handler_read_rnd_next. Вот простой способ его посмотреть (innotop - еще один удобный способ):
mysqladmin extended -r -i 10 | grep Handler_read_rnd_next
-- ignore the first line of output...
| Handler_read_rnd_next | 429224 |
Таким образом, сервер считывал примерно 43 КБ строк в секунду, а в таблице было 150 миллионов строк. Немного математики позже, и вы получите 3488 секунд до завершения, или чуть меньше часа. И действительно, запрос был выполнен примерно за 55 минут.
Это простейший случай, и есть более сложные, которые следует рассмотреть, но, надеюсь, это даст вам представление о том, как вы можете решить эту проблему в различных ситуациях.
Похоже, что оценить ход выполнения запроса - непростая задача. Вы можете посмотреть на эта почта.
Другие варианты, которые я могу выделить:
top
чтобы убедиться, что он все еще работает (потребляет ресурсы процессора).