本篇內(nèi)容介紹了“MySQL慢查詢?nèi)沼浽趺磁渲谩钡挠嘘P(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的市南網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
在mysql中,慢查詢就是日志中記錄運(yùn)行比較慢的SQL語句,指的是執(zhí)行超過“l(fā)ong_query_time”參數(shù)設(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è)定的時(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>
slow_query_log 啟動(dòng)停止技術(shù)慢查詢?nèi)罩?/p>
slow_query_log_file 指定慢查詢?nèi)罩镜么鎯?chǔ)路徑及文件(默認(rèn)和數(shù)據(jù)文件放一起)
long_query_time 指定記錄慢查詢?nèi)罩維QL執(zhí)行時(shí)間得伐值(單位:秒,默認(rèn)10秒)
log_queries_not_using_indexes 是否記錄未使用索引的SQL
log_output 日志存放的地方【TABLE】【FILE】【FILE,TABLE】
配置了慢查詢后,它會(huì)記錄符合條件的SQL
包括:
查詢語句
數(shù)據(jù)修改語句
已經(jīng)回滾得SQL
通過下面命令查看下上面的配置:
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ù)了。
但是在我的電腦上,不知道為啥,這個(gè)時(shí)間總是不能正常的執(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
如果你想查看哪些查詢語句的執(zhí)行效率低,可以從慢查詢?nèi)罩局蝎@得信息。和錯(cuò)誤日志、查詢?nèi)罩疽粯?,慢查詢?nèi)罩疽彩且晕谋疚募男问酱鎯?chǔ)的,可以使用普通的文本文件查看工具來查看。
例 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)罩镜膭h除方法與通用日志的刪除方法是一樣的??梢允褂?mysqladmin 命令來刪除。也可以使用手工方式來刪除。mysqladmin 命令的語法如下:
mysqladmin -uroot -p flush-logs
執(zhí)行該命令后,命令行會(huì)提示輸入密碼。輸入正確密碼后,將執(zhí)行刪除操作。新的慢查詢?nèi)罩緯?huì)直接覆蓋舊的查詢?nèi)罩?,不需要再手?dòng)刪除。
數(shù)據(jù)庫管理員也可以手工刪除慢查詢?nèi)罩?,刪除之后需要重新啟動(dòng) MySQL 服務(wù)。
注意:通用查詢?nèi)罩竞吐樵內(nèi)罩径际鞘褂眠@個(gè)命令,使用時(shí)一定要注意,一旦執(zhí)行這個(gè)命令,通用查詢?nèi)罩竞吐樵內(nèi)罩径贾淮嬖谛碌娜罩疚募?。如果需要備份舊的慢查詢?nèi)罩疚募?,必須先將舊的日志改名,然后重啟 MySQL 服務(wù)或執(zhí)行 mysqladmin 命令。
“mysql慢查詢?nèi)沼浽趺磁渲谩钡膬?nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
標(biāo)題名稱:mysql慢查詢?nèi)沼浽趺磁渲?/a>
文章位置:http://jinyejixie.com/article26/peoscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、動(dòng)態(tài)網(wǎng)站、微信小程序、電子商務(wù)、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)