一、查看慢查詢功能狀態(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)當前已經(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)罩?。本次?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è)計是否合理,并嘗試改進它。