一递礼、查看慢查詢功能狀態(tài)
-
查看慢查詢狀態(tài)
通過查看MySQL的slow_query_log
變量目溉,查看慢查詢是否已經(jīng)開啟嚎卫。show variables like 'slow_query_log';
示例:
mysql> show variables like 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | +----------------+-------+ 1 row in set, 1 warning (0.01 sec)
當(dāng)前已經(jīng)開啟了慢查詢?nèi)罩尽?/p>
-
查看慢查詢?nèi)罩镜臅r間
那么狰域,MySQL查詢多久算是慢查詢呢永部,可以通過long_query_time
來展示字管。show variables like 'long_query_time';
示例:
mysql> show variables like 'long_query_time'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 2.000000 | +-----------------+----------+ 1 row in set, 1 warning (0.00 sec)
這里展示的是啰挪,超過2秒的查詢,就是慢查詢嘲叔。如果值是0的話亡呵,表示所有查詢都寫入慢查詢?nèi)罩尽?/p>
-
查看慢查詢?nèi)罩镜穆窂?br> 我們可以通過
slow_query_log_file
變量查詢?nèi)罩镜穆窂健?/p>show variables like 'slow_query_log_file';
示例:
mysql> show variables like 'slow_query_log_file'; +---------------------+-----------------------------+ | Variable_name | Value | +---------------------+-----------------------------+ | slow_query_log_file | ../logs/mysql_slowquery.log | +---------------------+-----------------------------+ 1 row in set, 1 warning (0.00 sec)
這里,顯示路徑是MySQL安裝目錄下面的
logs
目錄內(nèi)部(MySQL的運行目錄是安裝目錄下的bin
目錄)硫戈。
二锰什、開啟慢查詢功能
- 開啟慢查詢?nèi)罩?br>
如果你的MySQL沒有開啟慢查詢的話,可以使用下面的操作開啟慢查詢功能丁逝。
開啟方法:
示例:set global slow_query_log = on;
mysql> set global slow_query_log = on; Query OK, 0 rows affected (0.00 sec)
- 設(shè)置慢查詢的時間
示例:set global long_query_time=1;
mysql> set global long_query_time=1; Query OK, 0 rows affected (0.00 sec)
- 設(shè)置慢查詢?nèi)罩镜穆窂?br>
如果你有修改慢查詢?nèi)罩镜男枨笾ǎ梢允褂孟旅娴拿?
set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log';
- 記錄未使用索引的SQL
如果,想把查詢中霜幼,沒有使用索引的SQL語句嫩码,記錄到慢查詢?nèi)罩纠锩妫梢允褂孟旅娴拿铋_啟罪既。set global log_queries_not_using_indexes = on;
三谢谦、測試慢查詢?nèi)罩居涗?/h3>
慢查詢功能開啟之后,可以執(zhí)行一個很耗時的sql
來測試萝衩。如果一時間回挽,沒有合適的sql
的來執(zhí)行的話,可以執(zhí)行MySQL的sleep
操作來模擬測試猩谊。
如果想要模擬一個4秒的慢查詢千劈,可以使用以下操作
select sleep(4);
實例如下:
mysql> select sleep(4);
+----------+
| sleep(4) |
+----------+
| 0 |
+----------+
1 row in set (4.00 sec)
此時,就可以去自己慢查詢文件牌捷,看看記錄的日志了墙牌。
四、慢查詢?nèi)罩痉治?/h3>
這是我的數(shù)據(jù)庫內(nèi)部的一個慢查詢記錄暗甥。
展示如下
(這是我做壓力測試的時候的喜滨,產(chǎn)生的數(shù)據(jù),由于壓力測試前期的操作搶占了大量的資源撤防,造成后面的數(shù)據(jù)添加等待時間過長虽风,于是被記錄到慢查詢?nèi)罩尽1敬螆?zhí)行的語句并沒有問題。)
# Time: 2020-08-06T10:19:05.049526Z
# User@Host: root[root] @ localhost [::1] Id: 10799
# Query_time: 2.495331 Lock_time: 0.000216 Rows_sent: 0 Rows_examined: 0
SET timestamp=1596709142;
INSERT INTO t1 VALUES (NULL,18283,'2rcN83iyGgXMcql46x93aHooXcjSnQXHYjn8PSlyxjD1WoBA9YETLlnDtaYYW12HHWiO1W3HjJb9niqiI67q8BeDKjmiWYoELINnPILHAuyILNwnypv5bQ6ZKA8oYD') ;
Time 操作執(zhí)行的時間節(jié)點辜膝。
User@Host 表示該操作的用戶以及主機信息无牵。
Query_time 該操作的執(zhí)行時間。
Lock_time 該操作的鎖定時間厂抖。
Rows_sent 該操作的發(fā)送的行茎毁。
Rows_examined 該操作的執(zhí)行的行。
timestamp 時間戳的形式記錄的執(zhí)行時間忱辅。
SQL語句 執(zhí)行的語句七蜘。
這里幫助發(fā)現(xiàn)你的SQL語句。你可以自行檢查你的語句的設(shè)計是否合理墙懂,并嘗試改進它橡卤。