Ну, вы можете войти в консоль 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
, чтобы убедиться, что он все еще работает (потребляет CPU).