什麼是mysql慢查詢

青灯夜游
發布: 2022-02-17 16:37:10
原創
7297 人瀏覽過

在mysql中,慢查詢就是日誌中記錄運行比較慢的SQL語句,指的是執行超過「long_query_time」參數設定的時間閾值的SQL語句查詢。慢查詢記錄在慢查詢日誌中,透過慢查詢日誌,可以找出哪些查詢語句的執行效率低,以便進行最佳化。

什麼是mysql慢查詢

本教學操作環境: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影片教學

以上是什麼是mysql慢查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板