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

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

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

分析慢SQL的步驟

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

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

基本介紹

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

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

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

特別說明

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

當(dāng)然,如果不是調(diào)優(yōu)需要的話,一般不建議啟動該參數(shù),因為開啟慢查詢?nèi)罩緯蚨嗷蛏賻硪欢ǖ男阅苡绊?。慢查詢?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重啟后會失效。
-- 指定數(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)罩居谰瞄_啟(不推薦,浪費性能),需要修改my.cnf文件,在[mysqld]下增加修改參數(shù)。

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

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

查看閾值

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

MySQL中查看long_query_time的時間: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)

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

設(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高級】Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】,java開發(fā),mysql,sql,adb

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

 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高級】Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】,java開發(fā),mysql,sql,adb

# 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:實際查詢時間,單位是秒
  • Lock_time:鎖時間
  • select sleep(4):超時的語句

日志分析工具mysqldumpslow

在生產(chǎn)環(huán)境中,如果要手工分析日志,查找、分析SQL,顯然是個體力活,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 # 平均鎖定時間
                ar: average rows sent # 平均返回記錄數(shù)
                at: average query time # 平均查詢時間
                 c: count  # 訪問次數(shù)
                 l: lock time  # 鎖定時間
                 r: rows sent  # 返回記錄
                 t: query time  # 查詢時間 
  -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高級】Mysql找出執(zhí)行慢的SQL【慢查詢?nèi)罩臼褂门c分析】,java開發(fā),mysql,sql,adb

常用命令案例

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

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

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

文章說明

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

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

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

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

相關(guān)文章

  • 【MySQL】細談SQL高級查詢

    【MySQL】細談SQL高級查詢

    Hello大家好,本文要為大家?guī)淼氖怯嘘P(guān)SQL的高級查詢,在上一文學(xué)習(xí)了一些 基礎(chǔ)語法 后,我們應(yīng)該更進一步地去學(xué)習(xí)一些復(fù)雜性的SQL查詢語句,提升自己寫SQL的能力?? 在做高級查詢之前,我們先來做一些準(zhǔn)備工作 我們來新建一個教學(xué)管理 jxgl 數(shù)據(jù)庫 然后為了簡易起見,

    2024年02月05日
    瀏覽(25)
  • 【MySQL系列】- Select查詢SQL執(zhí)行過程詳解

    【MySQL系列】- Select查詢SQL執(zhí)行過程詳解

    一條SQL語句從發(fā)送到數(shù)據(jù)并返回結(jié)果,主要經(jīng)歷以下幾個過程: 連接器 : 查詢緩存 :如果開啟了查詢緩存,則會經(jīng)過這一步,但是大多數(shù)情況下都不是開啟的,也不建議開啟;MySQL8.0之后也刪除了這一塊功能。 分析器 : 優(yōu)化器 執(zhí)行器 2.1. 連接器 如果想對MySQL進行操作,第

    2024年02月08日
    瀏覽(88)
  • 【第3天】MYSQL快速入門-高級查詢(SQL 小虛竹)

    回城傳送–》《100天精通MYSQL從入門到就業(yè)》

    2023年04月09日
    瀏覽(31)
  • mysql 簡單定位慢查詢并分析SQL執(zhí)行效率

    mysql 簡單定位慢查詢并分析SQL執(zhí)行效率

    實際的日常開發(fā)工作中可能會遇到某個新功能在測試時需要很久才返回結(jié)果,這時就應(yīng)該分析是不是慢查詢導(dǎo)致的,如果確實有慢查詢,就需要來學(xué)習(xí)怎么找到慢查詢和怎么分析 SQL 執(zhí)行效率? 定位慢 SQL 有如下兩種解決方案: 查看慢查詢?nèi)罩敬_定已經(jīng)執(zhí)行完的慢查詢 show

    2024年02月11日
    瀏覽(93)
  • MySQL—一條查詢SQL語句的完整執(zhí)行流程

    MySQL—一條查詢SQL語句的完整執(zhí)行流程

    表結(jié)構(gòu)和數(shù)據(jù)如下: 我們分析的sql語句如下: 大體來說,MySQL可以分為Server層和存儲引擎層兩部分: Server層 包括:連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器等 涵蓋MySQL的大多數(shù)核心服務(wù)功能 所有的內(nèi)置函數(shù)(如日期、時間、數(shù)學(xué)和加密函數(shù)等),所有跨存儲引擎的功能都在

    2024年04月28日
    瀏覽(23)
  • MYSQL04高級_邏輯架構(gòu)剖析、查詢緩存、解析器、優(yōu)化器、執(zhí)行器、存儲引擎

    MYSQL04高級_邏輯架構(gòu)剖析、查詢緩存、解析器、優(yōu)化器、執(zhí)行器、存儲引擎

    ①. 服務(wù)器處理客戶端請求 ②. 連接層 系統(tǒng)(客戶端)訪問MySQL服務(wù)器前,做的第一件事就是建立TCP連接 經(jīng)過三次握手建立連接成功后,MySQL服務(wù)器對TCP傳輸過來的賬號密碼做身份認(rèn)證、權(quán)限獲取 用戶名或密碼不對,會收到一個Access denied for user錯誤,客戶端程序結(jié)束執(zhí)行用戶名密碼認(rèn)

    2024年02月12日
    瀏覽(57)
  • MySQL中,SQL 查詢總是先執(zhí)行SELECT語句嗎?

    在使用 MySQL 進行查詢時,我們通常會使用 SELECT 語句,但是 SELECT 語句是否總是最先被執(zhí)行呢?這是一個非常有趣的問題,本文將對此進行探討。 在 MySQL 中,SQL 查詢通常包括以下幾個步驟: 語法解析 :MySQL 會對 SQL 查詢語句進行語法解析,檢查語句是否符合 SQL 語法規(guī)范。

    2023年04月09日
    瀏覽(21)
  • 從Mysql架構(gòu)看一條查詢sql的執(zhí)行過程

    我們的程序或者工具要操作數(shù)據(jù)庫,第一步要做什么事情? 跟數(shù)據(jù)庫建立連接。 首先,MySQL必須要運行一個服務(wù),監(jiān)聽默認(rèn)的3306端口。在我們開發(fā)系統(tǒng)跟第三方對接的時候,必須要弄清楚的有兩件事。 第一個就是通信協(xié)議,比如我們是用HTTP還是WebService還是TCP? 第二個是消

    2024年02月08日
    瀏覽(92)
  • myql進階-一條查詢sql在mysql的執(zhí)行過程

    myql進階-一條查詢sql在mysql的執(zhí)行過程

    目錄 1. 流程圖 2. 各個過程 2.1 連接器 2.2 分析器 2.3 優(yōu)化器 2.4 執(zhí)行器 2.5 注意點 假設(shè)我們執(zhí)行一條sql語句如下: 首先我們會和mysql建立連接,此時就會執(zhí)行到連接器。 連接器的職責(zé)是負(fù)責(zé)和客戶端建立連接、獲取權(quán)限、維持和管理連接。 我們執(zhí)行sql之前首先要和數(shù)據(jù)庫建立

    2024年01月21日
    瀏覽(95)
  • Mysql的學(xué)習(xí)與鞏固:一條SQL查詢語句是如何執(zhí)行的?

    Mysql的學(xué)習(xí)與鞏固:一條SQL查詢語句是如何執(zhí)行的?

    我們經(jīng)常說,看一個事兒千萬不要直接陷入細節(jié)里,你應(yīng)該先鳥瞰其全貌,這樣能夠幫助你從高維度理解問題。同樣,對于MySQL的學(xué)習(xí)也是這樣。平時我們使用數(shù)據(jù)庫,看到的通常都是一個整體。比如,你有個最簡單的表,表里只有一個ID字段,在執(zhí)行下面這個查詢語句時:

    2023年04月13日
    瀏覽(97)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包