小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MySQL慢查日志

 貪挽懶月 2022-06-20 發(fā)布于廣東

監(jiān)控系統(tǒng)監(jiān)控到我們的程序變慢了,懷疑是sql的原因,要怎么去分析排查呢?一般按照如下幾個(gè)步驟進(jìn)行:

  • 開(kāi)啟慢查詢?nèi)罩荆O(shè)置閥值,將慢sql從日志中抓取出來(lái);
  • 分析慢sql,查看其執(zhí)行計(jì)劃;
  • show profile,查詢sql的執(zhí)行細(xì)節(jié)和生命周期情況;
  • MySQL數(shù)據(jù)庫(kù)參數(shù)調(diào)優(yōu)。

本文先來(lái)講講慢查日志。

1. 是什么?

MySQL慢查日志是一種記錄執(zhí)行很慢的sql的日志。MySQL中可以通過(guò)long_query_time來(lái)設(shè)置一個(gè)閥值,如果執(zhí)行時(shí)間超過(guò)這個(gè)閥值,就會(huì)被認(rèn)為是慢sql,就會(huì)記錄到慢查日志中。該閥值默認(rèn)是10s,即執(zhí)行超過(guò)10s的sql就會(huì)被記錄。

2. 怎么用?

  • 開(kāi)啟方法:

MySQL默認(rèn)是沒(méi)有開(kāi)啟慢查日志的,如果不是調(diào)優(yōu)需要的話,不建議開(kāi)啟,因?yàn)檫@個(gè)也會(huì)帶來(lái)性能的影響。執(zhí)行以下sql可以查詢是否開(kāi)啟慢查日志以及慢查日志的路徑:

show variables like '%slow_query_log%';
執(zhí)行結(jié)果

可以看到默認(rèn)是off的。執(zhí)行以下sql即可開(kāi)啟:

set global slow_query_log = 1;
執(zhí)行結(jié)果

可以看到,已經(jīng)變成on了,也就是開(kāi)啟了。不過(guò)這樣設(shè)置并不是永久生效,重啟后就失效了,如果要永久生效,就得修改MySQL的配置文件my.cnf,在[mysqld]下增加如下配置:

slow_query_log=1
slow_query_log_file=/var/lib/mysql/sql-slow.log
long_query_time=3
log_output=FILE

增加了這兩行配置后,重啟MySQL就可以了。

  • 修改閥值:

執(zhí)行如下sql可以查看當(dāng)前設(shè)置的閥值:

show variables like 'long_query_time';
執(zhí)行結(jié)果

可以看到,當(dāng)前設(shè)置的是10秒。要大于10s才會(huì)觸發(fā),等于是不會(huì)觸發(fā)的。但是10s這個(gè)閥值太大了,我們一般會(huì)改小一點(diǎn),通過(guò)以下sql可以修改該值:

set long_query_time = 3;
執(zhí)行結(jié)果

那么我們要怎么驗(yàn)證修改是否生效呢?也就是超過(guò)3s的sql到底有沒(méi)有被記錄到慢查日志中呢?執(zhí)行如下sql:

select sleep(4);

這條sql就要睡4秒之后才會(huì)執(zhí)行,所以最少都要執(zhí)行4秒多,我們?cè)O(shè)置的閥值是3秒,所以肯定會(huì)被記錄。

剛才查看了知道慢查日志名字叫localhost-slow.log,那么到底在哪個(gè)目錄下?可以通過(guò)執(zhí)行如下命令來(lái)查找:

find / -name "localhost-slow.log"
執(zhí)行結(jié)果

我們cat一下這個(gè)文件,看看剛剛執(zhí)行的select sleep(4)到底有沒(méi)有被記錄,結(jié)果如下:

執(zhí)行結(jié)果

可以看到,確實(shí)生效了,sql被記錄到了慢查日志中。

我們還可以通過(guò)執(zhí)行如下語(yǔ)句,來(lái)查詢當(dāng)前有多少條慢sql:

show global status like "%Slow_queries%";
執(zhí)行結(jié)果
  • 日志分析工具:mysqldumpslow

生產(chǎn)環(huán)境可能會(huì)出現(xiàn)很多的慢查日志,如果都要手工分析,也是比較費(fèi)時(shí)的,MySQL提供了慢查日志分析工具,mysqldumpslow。

執(zhí)行如下命令可以查看幫助文檔:

mysqldumpslow --help
幫助文檔

常見(jiàn)命令如下:

# 得到返回記錄集最多的10個(gè)sql
mysqldumpslow -s r -t 10 /var/lib/mysql/localhost-slow.log

# 得到訪問(wèn)次數(shù)最多的10個(gè)sql
mysqldumpslow -s c -t 10 /var/lib/mysql/localhost-slow.log

# 得到按照時(shí)間排序的前10條里面含有左連接的查詢語(yǔ)句
mysqldumpslow -s t -t 10 -g "left join"  /var/lib/mysql/localhost-slow.log

# 一般執(zhí)行上面的語(yǔ)句都要和 | more 一起使用,否則爆屏
mysqldumpslow -s r -t 10 /var/lib/mysql/local

掃描二維碼

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多