溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql慢查詢?nèi)沼浽趺磁渲?/h1>
發(fā)布時間:2022-02-18 13:39:02 來源:億速云 閱讀:389 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“mysql慢查詢?nèi)沼浽趺磁渲谩钡挠嘘P(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

在mysql中,慢查詢就是日志中記錄運(yùn)行比較慢的SQL語句,指的是執(zhí)行超過“l(fā)ong_query_time”參數(shù)設(shè)定的時間閾值的SQL語句查詢。慢查詢記錄在慢查詢?nèi)罩局?,通過慢查詢?nèi)罩?,可以查找出哪些查詢語句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

什么是慢查詢

慢查詢,顧名思義,就是在日志中記錄運(yùn)行比較慢的SQL語句,是指mysql記錄所有執(zhí)行超過long_query_time參數(shù)設(shè)定的時間閾值的SQL語句查詢。

慢查詢記錄在慢查詢?nèi)罩局?,通過慢查詢?nèi)罩?,可以查找出哪些查詢語句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。該日志能為SQL語句的優(yōu)化帶來很好的幫助。

默認(rèn)情況下,慢查詢?nèi)罩臼顷P(guān)閉的,要使用慢查詢?nèi)罩竟δ?,首先要開啟慢查詢?nèi)罩竟δ堋?/p>

慢查詢?nèi)罩九渲?/h3>

1. 慢查詢基本配置

  • slow_query_log 啟動停止技術(shù)慢查詢?nèi)罩?/p>

  • slow_query_log_file 指定慢查詢?nèi)罩镜么鎯β窂郊拔募J(rèn)和數(shù)據(jù)文件放一起)

  • long_query_time 指定記錄慢查詢?nèi)罩維QL執(zhí)行時間得伐值(單位:秒,默認(rèn)10秒)

  • log_queries_not_using_indexes  是否記錄未使用索引的SQL

  • log_output 日志存放的地方【TABLE】【FILE】【FILE,TABLE】

配置了慢查詢后,它會記錄符合條件的SQL

包括:

  • 查詢語句

  • 數(shù)據(jù)修改語句

  • 已經(jīng)回滾得SQL

2. 實(shí)操:

通過下面命令查看下上面的配置:

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'

設(shè)置慢查詢的參數(shù):

set global long_query_time=0;   ---默認(rèn)10秒,這里為了演示方便設(shè)置為0
set GLOBAL  slow_query_log = 1; --開啟慢查詢?nèi)罩?
set global log_output='FILE,TABLE'  --項(xiàng)目開發(fā)中日志只能記錄在日志文件中,不能記表中

設(shè)置完成后,查詢一些列表可以發(fā)現(xiàn)慢查詢的日志文件里面有數(shù)據(jù)了。

但是在我的電腦上,不知道為啥,這個時間總是不能正常的執(zhí)行sql結(jié)果。更新不了;

所以我們用這樣的方法就可以了:

找到my.cnf,添加如下內(nèi)容

# 添加慢查詢?nèi)罩?
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. 查看慢查詢?nèi)罩?/h3>

如果你想查看哪些查詢語句的執(zhí)行效率低,可以從慢查詢?nèi)罩局蝎@得信息。和錯誤日志、查詢?nèi)罩疽粯?,慢查詢?nèi)罩疽彩且晕谋疚募男问酱鎯Φ?,可以使用普通的文本文件查看工具來查看?/p>

例 1

開啟 MySQL 慢查詢?nèi)罩竟δ?,并設(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è)置為了 0.001 秒,執(zhí)行時間超過 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%';

4、刪除慢查詢?nèi)罩?/h3>

慢查詢?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)罩径际鞘褂眠@個命令,使用時一定要注意,一旦執(zhí)行這個命令,通用查詢?nèi)罩竞吐樵內(nèi)罩径贾淮嬖谛碌娜罩疚募?。如果需要備份舊的慢查詢?nèi)罩疚募?,必須先將舊的日志改名,然后重啟 MySQL 服務(wù)或執(zhí)行 mysqladmin 命令。

“mysql慢查詢?nèi)沼浽趺磁渲谩钡膬?nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)
AI