MySQL慢查詢?nèi)罩?Slow Query Log)的實(shí)現(xiàn)
慢查詢?nèi)罩居脕碛涗浽?MySQL 中執(zhí)行時(shí)間超過指定時(shí)間的查詢語句。通過慢查詢?nèi)罩荆梢圆檎页瞿男┎樵冋Z句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。
通俗的說,MySQL 慢查詢?nèi)罩臼桥挪閱栴}的 SQL 語句,以及檢查當(dāng)前 MySQL 性能的一個(gè)重要功能。如果不是調(diào)優(yōu)需要,一般不建議啟動該參數(shù),因?yàn)殚_啟慢查詢?nèi)罩緯蚨嗷蛏賻硪欢ǖ男阅苡绊憽?/p>
默認(rèn)情況下,慢查詢?nèi)罩竟δ苁顷P(guān)閉的??梢酝ㄟ^以下命令查看是否開啟慢查詢?nèi)罩竟δ?。命令和?zhí)行過程如下:
mysql> SHOW VARIABLES LIKE 'slow_query%'; +---------------------+---------------------------------------------------------------------+ | Variable_name | Value | +---------------------+---------------------------------------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | C:\ProgramData\MySQL\MySQL Server 5.7\Data\LAPTOP-UHQ6V8KP-slow.log | +---------------------+---------------------------------------------------------------------+ 2 rows in set, 1 warning (0.02 sec) mysql> SHOW VARIABLES LIKE 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set, 1 warning (0.01 sec)
參數(shù)說明如下:
- slow_query_log:慢查詢開啟狀態(tài)
- slow_query_log_file:慢查詢?nèi)罩敬娣诺奈恢茫ㄒ话阍O(shè)置為 MySQL 的數(shù)據(jù)存放目錄)
- long_query_time:查詢超過多少秒才記錄
啟動和設(shè)置慢查詢?nèi)罩?/h2>
可以通過 log-slow-queries 選項(xiàng)開啟慢查詢?nèi)罩?。通過 long_query_time 選項(xiàng)來設(shè)置時(shí)間值,時(shí)間以秒為單位。如果查詢時(shí)間超過了這個(gè)時(shí)間值,這個(gè)查詢語句將被記錄到慢查詢?nèi)罩尽?/p>
將 log_slow_queries 選項(xiàng)和 long_query_time 選項(xiàng)加入到配置文件的 [mysqld] 組中。格式如下:
[mysqld] log-slow-queries=dir\filename long_query_time=n
其中:
- dir 參數(shù)指定慢查詢?nèi)罩镜拇鎯β窂剑绻恢付ù鎯β窂?,慢查詢?nèi)罩緦⒛J(rèn)存儲到 MySQL 數(shù)據(jù)庫的數(shù)據(jù)文件夾下。
- filename 參數(shù)指定日志的文件名,生成日志文件的完整名稱為 filename-slow.log。 如果不指定文件名,默認(rèn)文件名為 hostname-slow.log,hostname 是 MySQL 服務(wù)器的主機(jī)名。
- “n”參數(shù)是設(shè)定的時(shí)間值,該值的單位是秒。如果不設(shè)置 long_query_time 選項(xiàng),默認(rèn)時(shí)間為 10 秒。
還可以通過以下命令啟動慢查詢?nèi)罩尽⒃O(shè)置指定時(shí)間:
SET GLOBAL slow_query_log=ON/OFF; SET GLOBAL long_query_time=n;
查看慢查詢?nèi)罩?/h2>
如果你想查看哪些查詢語句的執(zhí)行效率低,可以從慢查詢?nèi)罩局蝎@得信息。和錯(cuò)誤日志、查詢?nèi)罩疽粯?,慢查詢?nèi)罩疽彩且晕谋疚募男问酱鎯Φ?,可以使用普通的文本文件查看工具來查看?/p>
例 1
開啟 MySQL 慢查詢?nèi)罩竟δ?,并設(shè)置時(shí)間,命令和執(zhí)行過程如下:
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)
由于需要演示這里我們將時(shí)間設(shè)置為了 0.001 秒,執(zhí)行時(shí)間超過 0.001 秒的 SQL 語句將被記錄到日志中。
查詢 tb_student 表中的數(shù)據(jù),SQL 語句和執(zhí)行過程如下:
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)
相應(yīng)的,慢查詢?nèi)罩镜牟糠謨?nèi)容如下:
# 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%';
刪除慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩镜膭h除方法與通用日志的刪除方法是一樣的??梢允褂?mysqladmin 命令來刪除。也可以使用手工方式來刪除。mysqladmin 命令的語法如下:
mysqladmin -uroot -p flush-logs
執(zhí)行該命令后,命令行會提示輸入密碼。輸入正確密碼后,將執(zhí)行刪除操作。新的慢查詢?nèi)罩緯苯痈采w舊的查詢?nèi)罩?,不需要再手動刪除。
數(shù)據(jù)庫管理員也可以手工刪除慢查詢?nèi)罩?,刪除之后需要重新啟動 MySQL 服務(wù)。
注意:通用查詢?nèi)罩竞吐樵內(nèi)罩径际鞘褂眠@個(gè)命令,使用時(shí)一定要注意,一旦執(zhí)行這個(gè)命令,通用查詢?nèi)罩竞吐樵內(nèi)罩径贾淮嬖谛碌娜罩疚募?。如果需要備份舊的慢查詢?nèi)罩疚募仨毾葘⑴f的日志改名,然后重啟 MySQL 服務(wù)或執(zhí)行 mysqladmin 命令。
到此這篇關(guān)于MySQL慢查詢?nèi)罩?Slow Query Log)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL慢查詢?nèi)罩?內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 5.7.18 安裝配置方法圖文教程(CentOS7)
這篇文章主要為大家詳細(xì)介紹了CentOS 7下mysql 5.7.18 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
MySQL數(shù)據(jù)庫之聯(lián)合查詢?union
這篇文章主要介紹了MySQL數(shù)據(jù)庫之聯(lián)合查詢?union,聯(lián)合查詢就是將多個(gè)查詢結(jié)果的結(jié)果集合并到一起,字段數(shù)不變,多個(gè)查詢結(jié)果的記錄數(shù)合并,下文詳細(xì)介紹需要的小伙伴可以參考一下2022-06-06
mysql中的delete,drop和truncate有什么區(qū)別
這篇文章主要介紹了mysql中的delete,drop和truncate有什么區(qū)別,三者的用法和使用場景又完全不同,接下來我們來看看具體的區(qū)別吧,希望對你的學(xué)習(xí)有所幫助2022-06-06
MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法舉例
這篇文章主要給大家介紹了關(guān)于MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法,在MySQL中可以使用聚合函數(shù)與GROUP BY語句可以對數(shù)據(jù)進(jìn)行分組并進(jìn)行聚合計(jì)算,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
MySQL數(shù)據(jù)庫統(tǒng)計(jì)函數(shù)COUNT的使用及說明
這篇文章主要介紹了MySQL數(shù)據(jù)庫統(tǒng)計(jì)函數(shù)COUNT的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
mysql 發(fā)生系統(tǒng)錯(cuò)誤1067的解決方法
今天要把WEB項(xiàng)目打包成EXE,可是在數(shù)據(jù)庫上卡住了。在啟動數(shù)據(jù)庫服務(wù)的時(shí)候發(fā)生系統(tǒng)錯(cuò)誤 1067。2009-09-09

