Pull to refresh

MySQL Profiler: простой и удобный инструмент профилирования запросов

Reading time 2 min
Views 46K
Сегодня был неожиданно удивлен, какие удобные штуки таит в себе MySQL. ;-)

Хочу представить вашему вниманию фичу MySQL — профайлинг.
Появилась она начиная с версии 5.0.37.

Всего парой запросов можно узнать, какими запросами формируется страница (для веб-девелоперов)
и почему она тормозит.

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

Итак, как пользоваться:



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)



Вуаля! Все выполненные запросы за сессию с временем выполнения.

На мой взгляд очень просто и сверх-удобно.

Можно пойти дальше, и узнать подробно на что тратилось время по каждому запросу:

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)


Подробнее о профайлинге в статье: Using the New MySQL Query Profiler

Upd: как точно подметил zayceslav show profiles по умолчанию показывает профили для 15 запросов. Кол-во запрсов можно увеличить с помощью параметра profiling_history_size, но не более чем до 100.

mysql> set profiling=1;
mysql> set profiling_history_size=100;


PS: это мой первый пост, прошу не судить строго
Tags:
Hubs:
+118
Comments 52
Comments Comments 52

Articles