深入了解MySQL中的慢查詢?nèi)罩?/h1>
更新時(shí)間:2023年03月17日 10:14:32 作者:跟著飛哥學(xué)編程
什么是MySQL慢查詢呢?其實(shí)就是查詢的SQL語句耗費(fèi)較長(zhǎng)的時(shí)間。具體耗費(fèi)多久算慢查詢呢?這其實(shí)因人而異,有些公司慢查詢的閾值是100ms,有些的閾值可能是500ms。本文將通過示例和大家聊聊慢查詢的危害和常用場(chǎng)景,感興趣的可以了解一下
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩局饕脕碛涗泩?zhí)行時(shí)間超過設(shè)置的某個(gè)時(shí)長(zhǎng)的SQL語句,能夠幫助數(shù)據(jù)庫維護(hù)人員找出執(zhí)行時(shí)間比較長(zhǎng)、執(zhí)行效率比較低的SQL語句,并對(duì)這些SQL語句進(jìn)行針對(duì)性優(yōu)化。
開啟慢查詢
可以在 my.cnf
文件或者 my.ini
文件中配置開啟慢查詢?nèi)罩尽?/p>
[mysqld]
slow_query_log = 1
slow_query_log_file = /data/mysql/log/query_log/slow_statement.log
long_query_time = 10
log_output = FILE
各配置項(xiàng)說明如下:
slow_query_log
:指定是否開啟慢查詢?nèi)罩?。指定的值?或者不指定值都會(huì)開啟慢查詢?nèi)罩荆恢付ǖ闹禐?0 或者 不配置此選項(xiàng)就不會(huì)開啟慢查詢?nèi)罩尽?/p>
slow_query_log_file
:慢查詢?nèi)罩镜奈募恢谩?/p>
long_query_time
:指定SQL語句執(zhí)行時(shí)間超過多少秒時(shí)記錄慢查詢?nèi)罩尽?/p>
log_output
:與查詢?nèi)罩镜膌og_output選項(xiàng)相同,此處不再贅述。
注意:log_output
能夠配置將日志記錄到數(shù)據(jù)表中還是記錄到文件中,當(dāng)記錄到數(shù)據(jù)表中時(shí),則數(shù)據(jù)表中記錄的慢查詢時(shí)間只能精確到秒;如果是記錄到日志文件中,則日志文件中記錄的慢查詢時(shí)間能夠精確到微秒。建議在實(shí)際工作中,將慢查詢?nèi)罩居涗浀轿募小?/p>
配置完成后,重啟 MySQL 服務(wù)器配置才能生效。
除了在文件中配置開啟慢查詢?nèi)罩就?,也可以?MySQL 命令行中執(zhí)行如下命令開啟慢查詢?nèi)罩尽?/p>
mysql> SET GLOBAL slow_query_log = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL slow_query_log_file = '/data/mysql/log/query_log/slow_statement.log';
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL long_query_time = 10;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL log_output = 'FILE';
Query OK, 0 rows affected (0.00 sec)
成功開啟慢查詢?nèi)罩竞?,?huì)在 /data/mysql/log/query_log
目錄下生成 slow_statement.log
文件。
查看慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩救绻渲玫氖禽敵龅轿募瑒t會(huì)保存到純文本文件中,直接查看純文本文件的內(nèi)容即可。
構(gòu)造一個(gè)查詢時(shí)間超過 10 秒的 SQL 語句。
SELECT BENCHMARK(99999999, MD5('mysql'));

這條語句用了大概耗時(shí): 19.102s
我們看看慢查詢?nèi)罩疚募挠涗浫缦拢?/p>

刪除慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩竞筒樵內(nèi)罩疽粯右约兾谋疚募男问酱鎯?chǔ)在服務(wù)器磁盤中,可以直接刪除。如果需要重新生成慢查詢?nèi)罩?,可以?MySQL 命令行中運(yùn)行 FLUSH LOGS
命令,或者在服務(wù)器命令行中執(zhí)行mysqladmin flush-logs
命令。
(1)刪除慢查詢?nèi)罩尽?/p>
rm -rf /data/mysql/log/query_log/slow_statement.log
刪除后,查看/data/mysql/log/query_log
目錄下的文件。
結(jié)果顯示,slow_statement.log 文件已經(jīng)被成功刪除。
(2)在 MySQL 命令行中刷新日志。
mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.01 sec)
或者在服務(wù)器命令行中執(zhí)行如下命令刷新日志。
mysqladmin -uroot -p flush-logs
Enter password:
日志刷新成功后,再次查看/data/mysql/log/query_log
目錄下的文件。
MySQL重新創(chuàng)建了 slow_statement.log 文件。
關(guān)閉慢查詢?nèi)罩?/h3>
關(guān)閉慢查詢?nèi)罩?,只需要在my.cnf文件或者my.ini文件中配置slow_query_log=0或者直接刪除此選項(xiàng)即可。
[mysqld]
slow_query_log = 0
也可以在MySQL命令行中執(zhí)行如下命令關(guān)閉慢查詢?nèi)罩尽?/p>
mysql> SET GLOBAL slow_query_log = 0;
Query OK, 0 rows affected (0.00 sec)
當(dāng)關(guān)閉慢查詢?nèi)罩竞?,刪除慢查詢?nèi)罩疚募?,再?zhí)行刷新日志的操作,MySQL將不再重新創(chuàng)建慢查詢?nèi)罩疚募?/p>
到此這篇關(guān)于深入了解MySQL中的慢查詢?nèi)罩镜奈恼戮徒榻B到這了,更多相關(guān)MySQL慢查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MySQL慢查詢?nèi)罩緎lowlog的具體使用
- 詳解MySQL的慢查詢?nèi)罩竞湾e(cuò)誤日志
- 怎樣快速開啟MySQL的慢查詢?nèi)罩?/a>
- MySQL通用查詢?nèi)罩竞吐樵內(nèi)罩救娣治?/a>
- MySQL慢查詢?nèi)罩局械腖ock_time由來解析
- MySQL慢查詢?nèi)罩境敿?xì)總結(jié)
- MySQL優(yōu)化教程之慢查詢?nèi)罩緦?shí)踐
- MySQL 慢查詢?nèi)罩旧钊肜斫?/a>
- MySQL慢查詢?nèi)罩镜淖饔煤烷_啟
- MySQL 慢查詢?nèi)罩镜拈_啟與配置
- MySQL慢查詢?nèi)罩?Slow Query Log)的實(shí)現(xiàn)
相關(guān)文章
-
mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用
本文主要介紹了mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2022-02-02
-
MySQL優(yōu)化之如何寫出高質(zhì)量sql語句
在數(shù)據(jù)庫日常維護(hù)中,最常做的事情就是SQL語句優(yōu)化,因?yàn)檫@個(gè)才是影響性能的最主要因素。這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化之如何寫出高質(zhì)量sql語句的相關(guān)資料,需要的朋友可以參考下 2021-05-05
-
詳解mysql8.0創(chuàng)建用戶授予權(quán)限報(bào)錯(cuò)解決方法
這篇文章主要介紹了詳解mysql8.0創(chuàng)建用戶授予權(quán)限報(bào)錯(cuò)解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧 2018-09-09
-
MySQL 如何設(shè)計(jì)統(tǒng)計(jì)數(shù)據(jù)表
有些時(shí)候,改進(jìn)數(shù)據(jù)表查詢性能的最佳方式是在同一張數(shù)據(jù)表中冗余一些繼承的數(shù)據(jù)。然而,有些時(shí)候需要新建完全獨(dú)立的統(tǒng)計(jì)或緩存數(shù)據(jù)表,尤其是在需要反復(fù)查詢的需求情況下。如果業(yè)務(wù)允許一些時(shí)間上的誤差的話,那么這種方式會(huì)更好。 2021-06-06
-
MySQL 數(shù)據(jù)庫 binLog 日志的使用操作
binlog是MySQL數(shù)據(jù)庫中的一種日志類型,它記錄了數(shù)據(jù)庫中的所有更改操作,例如插入、更新、刪除操作,本文給大家介紹MySQL 數(shù)據(jù)庫 binLog 日志的使用,感興趣的朋友一起看看吧 2023-08-08
-
MySQL入門(二) 數(shù)據(jù)庫數(shù)據(jù)類型詳解
這個(gè)數(shù)據(jù)庫所遇到的數(shù)據(jù)類型今天統(tǒng)統(tǒng)在這里講清楚了,以后在看到什么數(shù)據(jù)類型,咱度應(yīng)該認(rèn)識(shí),對(duì)我來說,最不熟悉的應(yīng)該就是時(shí)間類型這塊了。但是通過今天的學(xué)習(xí),已經(jīng)解惑了。下面就跟著我的節(jié)奏去把這個(gè)拿下吧 2018-07-07
最新評(píng)論
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩局饕脕碛涗泩?zhí)行時(shí)間超過設(shè)置的某個(gè)時(shí)長(zhǎng)的SQL語句,能夠幫助數(shù)據(jù)庫維護(hù)人員找出執(zhí)行時(shí)間比較長(zhǎng)、執(zhí)行效率比較低的SQL語句,并對(duì)這些SQL語句進(jìn)行針對(duì)性優(yōu)化。
開啟慢查詢
可以在 my.cnf
文件或者 my.ini
文件中配置開啟慢查詢?nèi)罩尽?/p>
[mysqld] slow_query_log = 1 slow_query_log_file = /data/mysql/log/query_log/slow_statement.log long_query_time = 10 log_output = FILE
各配置項(xiàng)說明如下:
slow_query_log
:指定是否開啟慢查詢?nèi)罩?。指定的值?或者不指定值都會(huì)開啟慢查詢?nèi)罩荆恢付ǖ闹禐?0 或者 不配置此選項(xiàng)就不會(huì)開啟慢查詢?nèi)罩尽?/p>
slow_query_log_file
:慢查詢?nèi)罩镜奈募恢谩?/p>
long_query_time
:指定SQL語句執(zhí)行時(shí)間超過多少秒時(shí)記錄慢查詢?nèi)罩尽?/p>
log_output
:與查詢?nèi)罩镜膌og_output選項(xiàng)相同,此處不再贅述。
注意:log_output
能夠配置將日志記錄到數(shù)據(jù)表中還是記錄到文件中,當(dāng)記錄到數(shù)據(jù)表中時(shí),則數(shù)據(jù)表中記錄的慢查詢時(shí)間只能精確到秒;如果是記錄到日志文件中,則日志文件中記錄的慢查詢時(shí)間能夠精確到微秒。建議在實(shí)際工作中,將慢查詢?nèi)罩居涗浀轿募小?/p>
配置完成后,重啟 MySQL 服務(wù)器配置才能生效。
除了在文件中配置開啟慢查詢?nèi)罩就?,也可以?MySQL 命令行中執(zhí)行如下命令開啟慢查詢?nèi)罩尽?/p>
mysql> SET GLOBAL slow_query_log = 1; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL slow_query_log_file = '/data/mysql/log/query_log/slow_statement.log'; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL long_query_time = 10; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL log_output = 'FILE'; Query OK, 0 rows affected (0.00 sec)
成功開啟慢查詢?nèi)罩竞?,?huì)在 /data/mysql/log/query_log
目錄下生成 slow_statement.log
文件。
查看慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩救绻渲玫氖禽敵龅轿募瑒t會(huì)保存到純文本文件中,直接查看純文本文件的內(nèi)容即可。
構(gòu)造一個(gè)查詢時(shí)間超過 10 秒的 SQL 語句。
SELECT BENCHMARK(99999999, MD5('mysql'));
這條語句用了大概耗時(shí): 19.102s
我們看看慢查詢?nèi)罩疚募挠涗浫缦拢?/p>
刪除慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩竞筒樵內(nèi)罩疽粯右约兾谋疚募男问酱鎯?chǔ)在服務(wù)器磁盤中,可以直接刪除。如果需要重新生成慢查詢?nèi)罩?,可以?MySQL 命令行中運(yùn)行 FLUSH LOGS
命令,或者在服務(wù)器命令行中執(zhí)行mysqladmin flush-logs
命令。
(1)刪除慢查詢?nèi)罩尽?/p>
rm -rf /data/mysql/log/query_log/slow_statement.log
刪除后,查看/data/mysql/log/query_log
目錄下的文件。
結(jié)果顯示,slow_statement.log 文件已經(jīng)被成功刪除。
(2)在 MySQL 命令行中刷新日志。
mysql> FLUSH LOGS; Query OK, 0 rows affected (0.01 sec)
或者在服務(wù)器命令行中執(zhí)行如下命令刷新日志。
mysqladmin -uroot -p flush-logs Enter password:
日志刷新成功后,再次查看/data/mysql/log/query_log
目錄下的文件。
MySQL重新創(chuàng)建了 slow_statement.log 文件。
關(guān)閉慢查詢?nèi)罩?/h3>
關(guān)閉慢查詢?nèi)罩?,只需要在my.cnf文件或者my.ini文件中配置slow_query_log=0或者直接刪除此選項(xiàng)即可。
[mysqld] slow_query_log = 0
也可以在MySQL命令行中執(zhí)行如下命令關(guān)閉慢查詢?nèi)罩尽?/p>
mysql> SET GLOBAL slow_query_log = 0; Query OK, 0 rows affected (0.00 sec)
當(dāng)關(guān)閉慢查詢?nèi)罩竞?,刪除慢查詢?nèi)罩疚募?,再?zhí)行刷新日志的操作,MySQL將不再重新創(chuàng)建慢查詢?nèi)罩疚募?/p>
到此這篇關(guān)于深入了解MySQL中的慢查詢?nèi)罩镜奈恼戮徒榻B到這了,更多相關(guān)MySQL慢查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL慢查詢?nèi)罩緎lowlog的具體使用
- 詳解MySQL的慢查詢?nèi)罩竞湾e(cuò)誤日志
- 怎樣快速開啟MySQL的慢查詢?nèi)罩?/a>
- MySQL通用查詢?nèi)罩竞吐樵內(nèi)罩救娣治?/a>
- MySQL慢查詢?nèi)罩局械腖ock_time由來解析
- MySQL慢查詢?nèi)罩境敿?xì)總結(jié)
- MySQL優(yōu)化教程之慢查詢?nèi)罩緦?shí)踐
- MySQL 慢查詢?nèi)罩旧钊肜斫?/a>
- MySQL慢查詢?nèi)罩镜淖饔煤烷_啟
- MySQL 慢查詢?nèi)罩镜拈_啟與配置
- MySQL慢查詢?nèi)罩?Slow Query Log)的實(shí)現(xiàn)
相關(guān)文章
mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用
本文主要介紹了mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02MySQL優(yōu)化之如何寫出高質(zhì)量sql語句
在數(shù)據(jù)庫日常維護(hù)中,最常做的事情就是SQL語句優(yōu)化,因?yàn)檫@個(gè)才是影響性能的最主要因素。這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化之如何寫出高質(zhì)量sql語句的相關(guān)資料,需要的朋友可以參考下2021-05-05詳解mysql8.0創(chuàng)建用戶授予權(quán)限報(bào)錯(cuò)解決方法
這篇文章主要介紹了詳解mysql8.0創(chuàng)建用戶授予權(quán)限報(bào)錯(cuò)解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09MySQL 如何設(shè)計(jì)統(tǒng)計(jì)數(shù)據(jù)表
有些時(shí)候,改進(jìn)數(shù)據(jù)表查詢性能的最佳方式是在同一張數(shù)據(jù)表中冗余一些繼承的數(shù)據(jù)。然而,有些時(shí)候需要新建完全獨(dú)立的統(tǒng)計(jì)或緩存數(shù)據(jù)表,尤其是在需要反復(fù)查詢的需求情況下。如果業(yè)務(wù)允許一些時(shí)間上的誤差的話,那么這種方式會(huì)更好。2021-06-06MySQL 數(shù)據(jù)庫 binLog 日志的使用操作
binlog是MySQL數(shù)據(jù)庫中的一種日志類型,它記錄了數(shù)據(jù)庫中的所有更改操作,例如插入、更新、刪除操作,本文給大家介紹MySQL 數(shù)據(jù)庫 binLog 日志的使用,感興趣的朋友一起看看吧2023-08-08MySQL入門(二) 數(shù)據(jù)庫數(shù)據(jù)類型詳解
這個(gè)數(shù)據(jù)庫所遇到的數(shù)據(jù)類型今天統(tǒng)統(tǒng)在這里講清楚了,以后在看到什么數(shù)據(jù)類型,咱度應(yīng)該認(rèn)識(shí),對(duì)我來說,最不熟悉的應(yīng)該就是時(shí)間類型這塊了。但是通過今天的學(xué)習(xí),已經(jīng)解惑了。下面就跟著我的節(jié)奏去把這個(gè)拿下吧2018-07-07