Вимірювання фактичного часу запиту 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

Я не хотів відображати результати профілювання користувачам. Я просто хотів зняти його в прямому ефірі та зберігати для своїх цілей
Михайло

37

Прийнята відповідь стає недійсною ...

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


2
Якщо Профіль дає щось корисніше, ніж "надсилання даних", ви виграєте в лотерею.
Rick James

1
Я використовую 5.7.19 і досі show profilesпрацюю належним чином
Siva Praveen

1
@SivaPraveen - Добре, наразі це все ще працює, але "... буде вилучено ..."
Рік Джеймс,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.