什么是mysql慢查詢

mysql中,慢查詢就是日志中記錄運(yùn)行比較慢的SQL語句,指的是執(zhí)行超過“l(fā)ong_query_time”參數(shù)設(shè)定的時(shí)間閾值的SQL語句查詢。慢查詢記錄在慢查詢?nèi)罩局校ㄟ^慢查詢?nèi)罩荆梢圆檎页瞿男┎樵冋Z句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。

什么是mysql慢查詢

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

什么是慢查詢

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

慢查詢記錄在慢查詢?nèi)罩局校ㄟ^慢查詢?nèi)罩荆梢圆檎页瞿男┎樵冋Z句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。該日志能為SQL語句的優(yōu)化帶來很好的幫助。

默認(rèn)情況下,慢查詢?nèi)罩臼顷P(guān)閉的,要使用慢查詢?nèi)罩竟δ埽紫纫_啟慢查詢?nèi)罩竟δ堋?/p>

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

1.?慢查詢基本配置

  • ?slow_query_log 啟動(dòng)停止技術(shù)慢查詢?nèi)罩?/li>
  • 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

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ù)了。

但是在我的電腦上,不知道為啥,這個(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

3. 查看慢查詢?nèi)罩?/h2>

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

例 1

開啟 MySQL 慢查詢?nèi)罩竟δ埽⒃O(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%';

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

慢查詢?nèi)罩镜膭h除方法與通用日志的刪除方法是一樣的。可以使用 mysqladmin 命令來刪除。也可以使用手工方式來刪除。mysqladmin 命令的語法如下:

mysqladmin?-uroot?-p?flush-logs

執(zhí)行該命令后,命令行會(huì)提示輸入密碼。輸入正確密碼后,將執(zhí)行刪除操作。新的慢查詢?nèi)罩緯?huì)直接覆蓋舊的查詢?nèi)罩荆恍枰偈謩?dòng)刪除。

數(shù)據(jù)庫管理員也可以手工刪除慢查詢?nèi)罩荆瑒h除之后需要重新啟動(dòng) MySQL 服務(wù)。

注意:通用查詢?nèi)罩竞吐樵內(nèi)罩径际鞘褂眠@個(gè)命令,使用時(shí)一定要注意,一旦執(zhí)行這個(gè)命令,通用查詢?nèi)罩竞吐樵內(nèi)罩径贾淮嬖谛碌娜罩疚募小H绻枰獋浞菖f的慢查詢?nèi)罩疚募仨毾葘⑴f的日志改名,然后重啟 MySQL 服務(wù)或執(zhí)行 mysqladmin 命令。

【相關(guān)推薦:mysql視頻教程

以上就是什么是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享