国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】

這篇具有很好參考價(jià)值的文章主要介紹了Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

分析慢SQL的步驟

  1. 慢查詢的開啟并捕獲:開啟慢查詢?nèi)罩荆O(shè)置閾值,比如超過5秒鐘的就是慢SQL,至少跑1天,看看生產(chǎn)的慢SQL情況,并將它抓取出來
  2. explain + 慢SQL分析
  3. show Profile。(比explain還要詳細(xì),可以查詢SQL在MySQL數(shù)據(jù)庫中的執(zhí)行細(xì)節(jié)和生命周期情況)
  4. 運(yùn)維經(jīng)理 OR DBA,進(jìn)行MySQL數(shù)據(jù)庫服務(wù)器的參數(shù)調(diào)優(yōu)。(后端程序員沒有這個(gè)權(quán)限)

慢查詢?nèi)罩荆ǘㄎ宦齭ql)

基本介紹

慢查詢?nèi)罩臼鞘裁矗?/h4>

MySQL的慢查詢?nèi)罩臼荕ySQL提供的一種日志記錄,它用來記錄在MySQL中響應(yīng)時(shí)間超過閾值的語句,具體指運(yùn)行時(shí)間超過long_query_time值的SQL,則會(huì)被記錄到慢查詢?nèi)罩局小?/p>

  • long_query_time的默認(rèn)值為10,意思是運(yùn)行10秒以上的語句
  • 由慢查詢?nèi)罩緛聿榭茨男㏒QL超出了我們的最大忍耐時(shí)間值,比如一條SQL執(zhí)行超過5秒鐘,我們就算慢SQL,希望能收集超過5秒鐘的SQL,結(jié)合之前explain進(jìn)行全面分析

特別說明

**默認(rèn)情況下,MySQL數(shù)據(jù)庫沒有開啟慢查詢?nèi)罩荆?*需要我們手動(dòng)來設(shè)置這個(gè)參數(shù)。

當(dāng)然,如果不是調(diào)優(yōu)需要的話,一般不建議啟動(dòng)該參數(shù),因?yàn)殚_啟慢查詢?nèi)罩緯?huì)或多或少帶來一定的性能影響。慢查詢?nèi)罩局С謱⑷罩居涗泴懭胛募?/p>

查看慢查詢?nèi)罩臼欠耖_以及如何開啟

  • 查看慢查詢?nèi)罩臼欠耖_啟:SHOW VARIABLES LIKE '%slow_query_log%';。
  • 開啟慢查詢?nèi)罩荆?code>SET GLOBAL slow_query_log = 1;。使用該方法開啟MySQL的慢查詢?nèi)罩局粚Ξ?dāng)前數(shù)據(jù)庫生效,如果MySQL重啟后會(huì)失效。
-- 指定數(shù)據(jù)庫
mysql> use advanced_mysql_learning;
Database changed

--  查看慢查詢?nèi)罩臼欠耖_啟
mysql> SHOW VARIABLES LIKE '%slow_query_log%';
+---------------------+---------------------------------------------------------------------------+
| Variable_name       | Value                                                                     |
+---------------------+---------------------------------------------------------------------------+
| slow_query_log      | OFF                                                                       |
| slow_query_log_file | D:\Development\Sql\Mysql\mysql8\exe\mysql-8.0.27-winx64\data\dam-slow.log |
+---------------------+---------------------------------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

--  開啟慢查詢?nèi)罩?/span>
mysql> SET GLOBAL slow_query_log = 1;
Query OK, 0 rows affected (0.01 sec)

如果要使慢查詢?nèi)罩居谰瞄_啟(不推薦,浪費(fèi)性能),需要修改my.cnf文件,在[mysqld]下增加修改參數(shù)。

# my.cnf
[mysqld]
# 開啟慢查詢
slow_query_log=ON  
# 指定存儲(chǔ)慢查詢?nèi)罩镜奈募H绻@個(gè)文件不存在,會(huì)自動(dòng)創(chuàng)建
slow_query_log_file=/var/lib/mysql/slow.log

設(shè)置慢SQL的時(shí)間閾值

查看閾值

時(shí)間閾值是由參數(shù)long_query_time控制的,默認(rèn)情況下long_query_time的值為10秒。

MySQL中查看long_query_time的時(shí)間:SHOW VARIABLES LIKE 'long_query_time%';。

mysql> SHOW VARIABLES LIKE 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)

注意:是超過閾值才會(huì)被記錄,等于不會(huì)被記錄

設(shè)置閾值

--  設(shè)置閾值
mysql> set global long_query_time=3;
Query OK, 0 rows affected (0.00 sec)

--  可以發(fā)現(xiàn)設(shè)置沒有成功
mysql> SHOW VARIABLES LIKE 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)

Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】

也可以不重啟連接,使用如下命令直接查看

 show global variables like 'long_query_time';

也直接在my.cnf配置文件中修改

[mysqld]
long_query_time=1

查詢慢查詢?nèi)罩疚募械目傆涗洍l數(shù)

mysql> SHOW GLOBAL STATUS LIKE '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set (0.00 sec)

日志分析

模擬慢查詢

mysql> select sleep(4);
+----------+
| sleep(4) |
+----------+
|        0 |
+----------+
1 row in set (4.01 sec)

Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】

# Time: 2023-06-22T03:40:45.171751Z
# User@Host: root[root] @ localhost [::1]  Id:     8
# Query_time: 4.004906  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
use advanced_mysql_learning;
SET timestamp=1687405241;
select sleep(4);
  • use advanced_mysql_learning:使用的數(shù)據(jù)庫
  • Query_time:實(shí)際查詢時(shí)間,單位是秒
  • Lock_time:鎖時(shí)間
  • select sleep(4):超時(shí)的語句

日志分析工具mysqldumpslow

在生產(chǎn)環(huán)境中,如果要手工分析日志,查找、分析SQL,顯然是個(gè)體力活,MySQL提供了日志分析工具mysqldumpslow。比如有100條慢sql,如何快速找出出現(xiàn)頻次最高的前5條。

查看mysqldumpslow的幫助文檔

在Linux命令行窗口執(zhí)行mysqldumpslow --help

mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

  --verbose    verbose
  --debug      debug
  --help       write this text to standard output

  -v           verbose
  -d           debug
  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default  # 按照何種方式排序
                al: average lock time # 平均鎖定時(shí)間
                ar: average rows sent # 平均返回記錄數(shù)
                at: average query time # 平均查詢時(shí)間
                 c: count  # 訪問次數(shù)
                 l: lock time  # 鎖定時(shí)間
                 r: rows sent  # 返回記錄
                 t: query time  # 查詢時(shí)間 
  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries  # 返回前面多少條記錄
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string  
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】

常用命令案例

日志文件地址:/var/lib/mysql/slow.log

# 得到返回記錄集最多的10個(gè)SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log
 
# 得到訪問次數(shù)最多的10個(gè)SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/slow.log
 
# 得到按照時(shí)間排序的前10條里面含有左連接的查詢語句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow.log

# 另外建議使用這些命令時(shí)結(jié)合|和more使用,否則出現(xiàn)爆屏的情況
mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log | more

文章說明

本文章為本人學(xué)習(xí)尚硅谷的學(xué)習(xí)筆記,文章中大部分內(nèi)容來源于尚硅谷視頻(點(diǎn)擊學(xué)習(xí)尚硅谷相關(guān)課程),也有部分內(nèi)容來自于自己的思考,發(fā)布文章是想幫助其他學(xué)習(xí)的人更方便地整理自己的筆記或者直接通過文章學(xué)習(xí)相關(guān)知識(shí),如有侵權(quán)請聯(lián)系刪除,最后對尚硅谷的優(yōu)質(zhì)課程表示感謝。文章來源地址http://www.zghlxwxcb.cn/news/detail-505737.html

到了這里,關(guān)于Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包