中華住房與城鄉(xiāng)建設(shè)廳網(wǎng)站旺道網(wǎng)站優(yōu)化
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩局饕脕碛涗泩?zhí)行時間超過設(shè)置的某個時長的SQL語句,能夠幫助數(shù)據(jù)庫維護(hù)人員找出執(zhí)行時間比較長、執(zhí)行效率比較低的SQL語句,并對這些SQL語句進(jìn)行針對性優(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)罩尽V付ǖ闹禐?或者不指定值都會開啟慢查詢?nèi)罩?#xff1b;指定的值為 0 或者 不配置此選項(xiàng)就不會開啟慢查詢?nèi)罩尽?/p>
slow_query_log_file
:慢查詢?nèi)罩镜奈募恢谩?/p>
long_query_time
:指定SQL語句執(zhí)行時間超過多少秒時記錄慢查詢?nèi)罩尽?/p>
log_output
:與查詢?nèi)罩镜膌og_output選項(xiàng)相同,此處不再贅述。
注意:log_output
能夠配置將日志記錄到數(shù)據(jù)表中還是記錄到文件中,當(dāng)記錄到數(shù)據(jù)表中時,則數(shù)據(jù)表中記錄的慢查詢時間只能精確到秒;如果是記錄到日志文件中,則日志文件中記錄的慢查詢時間能夠精確到微秒。建議在實(shí)際工作中,將慢查詢?nèi)罩居涗浀轿募小?/p>
配置完成后,重啟 MySQL 服務(wù)器配置才能生效。
除了在文件中配置開啟慢查詢?nèi)罩就?#xff0c;也可以在 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)罩竞?#xff0c;會在 /data/mysql/log/query_log
目錄下生成 slow_statement.log
文件。
查看慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩救绻渲玫氖禽敵龅轿募?#xff0c;則會保存到純文本文件中,直接查看純文本文件的內(nèi)容即可。
- 構(gòu)造一個查詢時間超過 10 秒的 SQL 語句。
SELECT BENCHMARK(99999999, MD5('mysql'));
這條語句用了大概耗時: 19.102s
我們看看慢查詢?nèi)罩疚募挠涗浫缦?#xff1a;
刪除慢查詢?nèi)罩?/h3>
慢查詢?nèi)罩竞筒樵內(nèi)罩疽粯右约兾谋疚募男问酱鎯υ诜?wù)器磁盤中,可以直接刪除。如果需要重新生成慢查詢?nèi)罩?#xff0c;可以在 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)罩?#xff0c;只需要在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)罩竞?#xff0c;刪除慢查詢?nèi)罩疚募?#xff0c;再執(zhí)行刷新日志的操作,MySQL將不再重新創(chuàng)建慢查詢?nèi)罩疚募?/p>