Измерение фактического времени запроса MySQL

79

Как я могу измерить время выполнения запроса, не измеряя время, которое он проводит в ожидании снятия блокировки и т. Д.? Моя единственная идея заключалась в том, чтобы постоянно измерять один и тот же запрос и фиксировать самое быстрое время.

Михаил
источник

Ответы:

149

Запустите профилировщик с

SET profiling = 1;

Затем выполните свой запрос.

С участием

SHOW PROFILES;

вы увидите список запросов, по которым профилировщик имеет статистику. И, наконец, вы выбираете, с каким запросом исследовать

SHOW PROFILE FOR QUERY 1;

или любой другой номер вашего запроса.

Вы получите список, в котором точно указано, сколько времени было потрачено на выполнение запроса.

Больше информации в инструкции.

выпендрежник
источник
Это отлично! Вы знаете, медленно ли это? т.е. могу ли я добавить это в свой класс-оболочку для выполнения для каждого запроса, выполняемого на моем веб-сайте?
Михаил
3
Никогда об этом не думал. Почему вы хотите это сделать? Думаю, обычно это просто для разработки. Если вы хотите знать, какие запросы выполняются медленно, загляните в журнал медленных запросов. dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
fancyPants
Потому что запросы у разных пользователей занимают разное время. slow-query-log, кажется, подсчитывает время ожидания снятия блокировки
Михаил
1
Не совсем так. Ожидание блокировки также является признаком медленного выполнения другого запроса. Я предлагаю выбрать запросы в журнале медленных запросов, запустить их с помощью профилировщика, чтобы увидеть, на что они потратили столько времени. Затем, если возможно, улучшите их. Соответственно добавьте индексы, перезапишите их или сократите объем считываемых данных, если на запрос уходит много времени sending data. Или все, что нужно для повышения производительности. Я не вижу смысла сообщать пользователям, почему им приходится так долго ждать. На самом деле им все равно.
fancyPants 01
Я не хотел показывать пользователям результаты профилирования. Я просто хотел запечатлеть это вживую и сохранить для своих целей
Михаил
37

Принятый ответ становится недействительным ...

SHOW PROFILE[S]являются устаревшим MySQL 5.6.7 и будут удалены в выпуске будущего MySQL. Вместо этого используйте схему производительности; см. http://dev.mysql.com/doc/refman/5.6/en/performance-schema-query-profiling.html

Рик Джеймс
источник
2
Если Профиль дает вам что-то более полезное, чем «отправка данных», вы выигрываете в лотерею.
Рик Джеймс
1
Я использую 5.7.19 и все еще show profilesработаю правильно
Шива Правин
1
@SivaPraveen - Хорошо, пока он все еще работает, но «... будет удален ...»
Рик Джеймс