Одним из главных факторов эффективности выполнения MySQL запросов является время его выполнения. Отладка запросов MySQL является делом не из редких, и хорошо бы иметь под рукой удобный инструмент, который бы позволил оценить время выполнения запроса.
В MySQL начиная с версии 5.0.37 есть появился встроенный механизм — profiling, который позволяет оценить время выполнения того или иного запроса.
Рассмотрим пример его использования:
mysql> set profiling=1; mysql> select count(*) from comment; mysql> select count(*) from message; mysql> show profiles;
В качестве результата получаем данные в таком виде:
+----------+------------+------------------------------+ | Query_ID | Duration | Query | +----------+------------+------------------------------+ | 1 | 0.00012700 | select count(*) from comment | | 2 | 0.00014200 | select count(*) from message | +----------+------------+------------------------------+ 2 rows in set (0.00 sec)
Команда show profiles по умолчанию показывает результаты 15 запросов, цифру можно увеличить, задав параметр profiling_history_size:
mysql> set profiling=1; mysql> set profiling_history_size=100;
Этот метод так же хорош тем, что если мерить время выполнения запроса из самого кода приложения, то такие факторы, как коннект к серверу MySQL тоже может отнимать какое-то время, что в итоге может привести к неточным цифрам. В случае же с профилированием, вы просматриваете время выполнения самого запроса. Кроме этого можно просмотреть детальную информацию, на что тратилось время выполнения запроса:
mysql> show profile for query 1; +--------------------------------+----------+ | Status | Duration | +--------------------------------+----------+ | starting | 0.000015 | | checking query cache for query | 0.000021 | | checking permissions | 0.000003 | | Opening tables | 0.000007 | | System lock | 0.000004 | | Table lock | 0.000023 | | init | 0.000005 | | optimizing | 0.000005 | | executing | 0.000025 | | end | 0.000003 | | end | 0.000001 | | query end | 0.000002 | | storing result in query cache | 0.000003 | | freeing items | 0.000003 | | closing tables | 0.000004 | | logging slow query | 0.000002 | | cleaning up | 0.000001 | +--------------------------------+----------+ 17 rows in set (0.00 sec)
Довольно удобный инструмент, который можно использовать для оптимизации MySQL запросов.
Узнайте больше о возможностях использования в официальной документации — SHOW PROFILE Syntax.
Спасибо, не знал про show profile. Полезно!