Mysql profile 的應用

xchui702發表於2017-03-13
如何透過profile來發現語句的開銷

構造場景:
開啟一個回話,執行語句
lock table film_text read;

開啟另外一個回話,執行下面語句:
root@sakila 07:51:14>show variables like '%profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| have_profiling         | YES   |
| profiling              | OFF   |
| profiling_history_size | 15    |
+------------------------+-------+
3 rows in set (0.01 sec)

root@sakila 07:52:38>set profiling=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

root@sakila 07:52:45>update film_text set title='test' where film_id=1003;
Query OK, 0 rows affected (11.02 sec)
Rows matched: 1  Changed: 0  Warnings: 0


root@sakila 07:53:18>show profiles;
+----------+-------------+------------------------------------------------------+
| Query_ID | Duration    | Query                                                |
+----------+-------------+------------------------------------------------------+
|        1 | 11.02395150 | update film_text set title='test' where film_id=1003 |
+----------+-------------+------------------------------------------------------+
1 row in set, 1 warning (0.01 sec)


root@sakila 07:53:26>show profile for query 1;
+------------------------------+-----------+
| Status                       | Duration  |
+------------------------------+-----------+
| starting                     |  0.000793 |
| checking permissions         |  0.000032 |
| Opening tables               |  0.000087 |
| init                         |  0.000026 |
| System lock                  |  0.000025 |
| Waiting for table level lock | 11.018648 |
| System lock                  |  0.000770 |
| updating                     |  0.002947 |
| end                          |  0.000077 |
| query end                    |  0.000069 |
| closing tables               |  0.000062 |
| freeing items                |  0.000253 |
| cleaning up                  |  0.000163 |
+------------------------------+-----------+
13 rows in set, 1 warning (0.00 sec)

可以看到開銷是在這個waiting table lock.

貌似 show profiles 只能顯示本回話執行的sql語句的情況,即使設定了global profiling=1

所以如果要調優一組sql, 那麼把這一組sql放到一個回話中執行,然後執行show profiles 檢視每條語句的執行時間,並且進一步分析開銷在什麼地方。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/674865/viewspace-2135270/,如需轉載,請註明出處,否則將追究法律責任。

相關文章