在mysql中,慢查詢就是日志中記錄運行比較慢的SQL語句,指的是執行超過“long_query_time”參數設定的時間閾值的SQL語句查詢。慢查詢記錄在慢查詢日志中,通過慢查詢日志,可以查找出哪些查詢語句的執行效率低,以便進行優化。
本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。
什么是慢查詢
慢查詢,顧名思義,就是在日志中記錄運行比較慢的SQL語句,是指mysql記錄所有執行超過long_query_time參數設定的時間閾值的SQL語句查詢。
慢查詢記錄在慢查詢日志中,通過慢查詢日志,可以查找出哪些查詢語句的執行效率低,以便進行優化。該日志能為SQL語句的優化帶來很好的幫助。
默認情況下,慢查詢日志是關閉的,要使用慢查詢日志功能,首先要開啟慢查詢日志功能。
慢查詢日志配置
1.?慢查詢基本配置
- ?slow_query_log 啟動停止技術慢查詢日志
- slow_query_log_file?指定慢查詢日志得存儲路徑及文件(默認和數據文件放一起)
- long_query_time?指定記錄慢查詢日志SQL執行時間得伐值(單位:秒,默認10秒)
- log_queries_not_using_indexes ?是否記錄未使用索引的SQL
- log_output?日志存放的地方【table】【FILE】【FILE,TABLE】
配置了慢查詢后,它會記錄符合條件的SQL
包括:
- 查詢語句
- 數據修改語句
- 已經回滾得SQL
2.?實操:
通過下面命令查看下上面的配置:
show?VARIABLES?like?'%slow_query_log%' show?VARIABLES?like?'%slow_query_log_file%' show?VARIABLES?like?'%long_query_time%' show?VARIABLES?like?'%log_queries_not_using_indexes%' show?VARIABLES?like?'log_output'
設置慢查詢的參數:
set?global?long_query_time=0;???---默認10秒,這里為了演示方便設置為0 set?GLOBAL??slow_query_log?=?1;?--開啟慢查詢日志 set?global?log_output='FILE,TABLE'??--項目開發中日志只能記錄在日志文件中,不能記表中
設置完成后,查詢一些列表可以發現慢查詢的日志文件里面有數據了。
但是在我的電腦上,不知道為啥,這個時間總是不能正常的執行sql結果。更新不了;
所以我們用這樣的方法就可以了:
找到my.cnf,添加如下內容
#?添加慢查詢日志 log_output=file slow_query_log=on slow_query_log_file?=?/tmp/mysql-slow.log log_queries_not_using_indexes=on long_query_time?=?1
3. 查看慢查詢日志
如果你想查看哪些查詢語句的執行效率低,可以從慢查詢日志中獲得信息。和錯誤日志、查詢日志一樣,慢查詢日志也是以文本文件的形式存儲的,可以使用普通的文本文件查看工具來查看。
例 1
開啟 MySQL 慢查詢日志功能,并設置時間,命令和執行過程如下:
mysql>?SET?GLOBAL?slow_query_log=ON; Query?OK,?0?rows?affected?(0.05?sec) mysql>?SET?GLOBAL?long_query_time=0.001; Query?OK,?0?rows?affected?(0.00?sec)
由于需要演示這里我們將時間設置為了 0.001 秒,執行時間超過 0.001 秒的 SQL 語句將被記錄到日志中。
查詢 tb_student 表中的數據,SQL 語句和執行過程如下:
mysql>?USE?test; Database?changed mysql>?SELECT?*?FROM?tb_student; +----+--------+ |?id?|?name???| +----+--------+ |??1?|?Java???| |??2?|?MySQL??| |??3?|?Python?| +----+--------+ 3?rows?in?set?(0.08?sec)
相應的,慢查詢日志的部分內容如下:
#?Time:?2020-06-01T01:59:18.368780Z #?User@Host:?root[root]?@?localhost?[::1]??Id:?????3 #?Query_time:?0.006281??Lock_time:?0.000755?Rows_sent:?2??Rows_examined:?1034 use?test; SET?timestamp=1590976758; SHOW?VARIABLES?LIKE?'slow_query%';
4、刪除慢查詢日志
慢查詢日志的刪除方法與通用日志的刪除方法是一樣的。可以使用 mysqladmin 命令來刪除。也可以使用手工方式來刪除。mysqladmin 命令的語法如下:
mysqladmin?-uroot?-p?flush-logs
執行該命令后,命令行會提示輸入密碼。輸入正確密碼后,將執行刪除操作。新的慢查詢日志會直接覆蓋舊的查詢日志,不需要再手動刪除。
數據庫管理員也可以手工刪除慢查詢日志,刪除之后需要重新啟動 MySQL 服務。
注意:通用查詢日志和慢查詢日志都是使用這個命令,使用時一定要注意,一旦執行這個命令,通用查詢日志和慢查詢日志都只存在新的日志文件中。如果需要備份舊的慢查詢日志文件,必須先將舊的日志改名,然后重啟 MySQL 服務或執行 mysqladmin 命令。
【相關推薦:mysql視頻教程】