我們來學mysql -- 8.4版本記錄慢查詢

記錄慢查詢

  • 開啟慢查詢的配置
    • 查看慢查詢狀態
    • 動態開啟慢查詢日志
    • 永久開啟配置
    • log_throttle_queries_not_using_indexes
  • 記錄慢查詢對性能的影響
  • 實際案例說明
      • 第一條記錄
      • 第二條記錄
      • 第三條記錄
      • 第四條記錄

開啟慢查詢的配置

查看慢查詢狀態

-  執行 `show variables like 'slow_query_log%';`,
- 查看 `slow_query_log` 是否為 `ON`,若為 `OFF` 則未開啟
- 查看慢查詢日志文件路徑

在這里插入圖片描述

動態開啟慢查詢日志

  • 執行 set global slow_query_log='ON'; 可動態開啟慢查詢日志,但數據庫重啟后會失效

永久開啟配置

  • 修改my.cnfmy.ini,在 [mysqld] 部分添加

    參數說明
    slow_query_logon :開啟
    slow_query_log_file記錄慢sql日志路徑
    long_query_time默認為 10 秒,查詢耗時超過該閾值的 SQL 語句會被記錄
    log_queries_not_using_indexeson : 查詢sql沒有使用索引,會記錄到慢查詢日志中
    log_throttle_queries_not_using_indexes = 5每分鐘最多記錄 5 次未使用索引的查詢
    log_slow_slave_statements
    min_examined_row_limit掃描行數超過 100 行的查詢才會被記錄為慢查詢

    在這里插入圖片描述

      ```sqlslow_query_log = on slow_query_log_file = /u01/soft/oracle/logs/mysqld_slow.log long_query_time = 2log_queries_not_using_indexes = onlog_throttle_queries_not_using_indexes = 5log_slow_slave_statements = 1min_examined_row_limit = 100```
    
    • 保存后重啟 MySQL 服務使配置生效

log_throttle_queries_not_using_indexes

  • 不是只記錄 5 次,而是每分鐘最多記錄 5 次未使用索引的查詢。
  1. 設置目的

    • 這個參數主要是為了防止慢查詢日志文件被大量未使用索引的查詢信息瞬間淹沒。因為在實際的應用場景中,可能會有一些頻繁執行但未使用索引的查詢語句,如果不加以限制,這些語句的日志記錄會迅速占據大量的存儲空間,使得日志文件變得臃腫,不方便對真正有價值的慢查詢信息進行分析。
  2. 工作原理

    • 當開啟 log_queries_not_using_indexes 選項后,MySQL 會檢查查詢語句是否使用了索引。如果沒有使用索引,并且符合其他慢查詢的條件(如查詢時間超過 long_query_time 設定的閾值等),MySQL 會準備記錄這條查詢語句到慢查詢日志中。
    • 但是,為了控制記錄的頻率,log_throttle_queries_not_using_indexes 就發揮作用了。例如,當設置為 5 時,每分鐘最多記錄 5 次未使用索引的查詢。如果在這一分鐘內有大量未使用索引的查詢,超過 5 次后,后續的同類查詢在這一分鐘內就不會再被記錄了。這樣既能保證能夠獲取到未使用索引查詢的關鍵信息,又能夠避免日志文件被過多相似的記錄填滿。

記錄慢查詢對性能的影響

開啟慢查詢日志會對系統性能產生一定影響,因為記錄日志需要消耗磁盤 I/O 資源。在高并發寫入的場景下,這種影響可能會稍明顯。如果 MySQL 是主從結構,可考慮在從服務器上開啟慢查詢日志,以減少對主服務器性能的影響

實際案例說明


# User@Host: root[root] @ serverName [10.256.22.2]  Id: 249625
# Query_time: 0.016972  Lock_time: 0.000005 Rows_sent: 11  Rows_examined: 19185
use test-dev;
SET timestamp=1749630891;
SELECT * FROM *** GROUP BY **;
# Time: 2025-06-11T16:35:44.791481+08:00
# User@Host: [] @  []  Id: 249254
# Query_time: 0.041186  Lock_time: 0.000076 Rows_sent: 0  Rows_examined: 0
use tmp_dev;
SET timestamp=1749630944;
throttle:         17 'index not used' warning(s) suppressed.;
# Time: 2025-06-11T16:36:44.807640+08:00
# User@Host: [] @  []  Id: 249254
# Query_time: 0.015413  Lock_time: 0.000041 Rows_sent: 0  Rows_examined: 0
SET timestamp=1749631004;
throttle:         11 'index not used' warning(s) suppressed.;
# Time: 2025-06-11T16:37:44.821526+08:00
# User@Host: [] @  []  Id: 249565
# Query_time: 0.010364  Lock_time: 0.000032 Rows_sent: 0  Rows_examined: 0
SET timestamp=1749631064;
throttle:         13 'index not used' warning(s) suppressed.;

在 MySQL 慢查詢日志中,每條記錄通常以 # User@Host: 開始,接著記錄了查詢的執行時間、用戶、主機、查詢相關的性能指標,以及查詢語句本身等信息。以下是對上述日志信息的詳細解釋:

第一條記錄

  • # User@Host: root[root] @ serverName [10.256.22.2] Id: 249625

    • 表示執行查詢的用戶是 root,客戶端主機是 serverName ,其 IP 地址是 10.256.22.2,連接的線程 ID 是 249625。
  • # Query_time: 0.016972 Lock_time: 0.000005 Rows_sent: 11 Rows_examined: 19185

    • Query_time:查詢實際執行的時間是 0.016972 秒。
    • Lock_time:獲取鎖所花費的時間是 0.000005 秒。
    • Rows_sent:查詢返回的行數是 11 行。
    • Rows_examined:查詢過程中掃描的行數是 19185 行,這表明查詢可能沒有使用索引或者索引使用效率低,導致掃描了大量的數據行。
  • use test-dev;

    • 表示該查詢是在 test-dev 數據庫中執行的。
  • SET timestamp=1749630891;

    • 設置了時間戳,對應的時間可以通過 Unix 時間戳轉換工具轉換為具體時間。
  • SELECT ...

    • 這是具體的查詢語句。
  • # Time: 2025-06-11T16:35:44.791481+08:00

    • 這是查詢執行的時間戳,表明該查詢是在 2025 年 6 月 11 日 16 點 35 分 44 秒左右執行的。

第二條記錄

  • # User@Host: [] @ [] Id: 249254

    • 這里的用戶和主機信息顯示為 [],可能是因為在日志中未記錄具體的用戶和主機信息,或者該查詢是由系統內部進程或其他未明確標識的客戶端發起的,連接的線程 ID 是 249254。
  • # Query_time: 0.041186 Lock_time: 0.000076 Rows_sent: 0 Rows_examined: 0

    • Query_time:查詢實際執行的時間是 0.041186 秒。
    • Lock_time:獲取鎖所花費的時間是 0.000076 秒。
    • Rows_sent:查詢返回了 0 行數據。
    • Rows_examined:查詢過程中沒有掃描到任何行,這可能是因為查詢條件沒有匹配到任何數據,或者表中沒有數據。
  • use tmp_dev;

    • 表示該查詢是在 tmp_dev 數據庫中執行的。
  • SET timestamp=1749630944;

    • 設置了時間戳,對應的時間可以通過 Unix 時間戳轉換工具轉換為具體時間。
  • throttle: 17 'index not used' warning(s) suppressed.;

    • 這提示有 17 個 “index not used” 的警告被抑制,表明該查詢沒有使用索引,這可能是導致查詢性能不佳的一個因素。
  • # Time: 2025-06-11T16:36:44.807640+08:00

    • 這是查詢執行的時間戳,表明該查詢是在 2025 年 6 月 11 日 16 點 36 分 44 秒左右執行的。

第三條記錄

  • # User@Host: [] @ [] Id: 249254

    • 同樣未明確顯示用戶和主機信息,連接的線程 ID 是 249254。
  • # Query_time: 0.015413 Lock_time: 0.000041 Rows_sent: 0 Rows_examined: 0

    • Query_time:查詢實際執行的時間是 0.015413 秒。
    • Lock_time:獲取鎖所花費的時間是 0.000041 秒。
    • Rows_sent:查詢返回了 0 行數據。
    • Rows_examined:查詢過程中沒有掃描到任何行。
  • SET timestamp=1749631004;

    • 設置了時間戳,對應的時間可以通過 Unix 時間戳轉換工具轉換為具體時間。
  • throttle: 11 'index not used' warning(s) suppressed.;

    • 提示有 11 個 “index not used” 的警告被抑制,表明該查詢也沒有使用索引。
  • # Time: 2025-06-11T16:37:44.821526+08:00

    • 這是查詢執行的時間戳,表明該查詢是在 2025 年 6 月 11 日 16 點 37 分 44 秒左右執行的。

第四條記錄

  • # User@Host: [] @ [] Id: 249565

    • 未明確顯示用戶和主機信息,連接的線程 ID 是 249565。
  • # Query_time: 0.010364 Lock_time: 0.000032 Rows_sent: 0 Rows_examined: 0

    • Query_time:查詢實際執行的時間是 0.010364 秒。
    • Lock_time:獲取鎖所花費的時間是 0.000032 秒。
    • Rows_sent:查詢返回了 0 行數據。
    • Rows_examined:查詢過程中沒有掃描到任何行。
  • SET timestamp=1749631064;

    • 設置了時間戳,對應的時間可以通過 Unix 時間戳轉換工具轉換為具體時間。
  • throttle: 13 'index not used' warning(s) suppressed.;

    • 提示有 13 個 “index not used” 的警告被抑制,表明該查詢也沒有使用索引。
  • # Time: 2025-06-11T16:38:44.83+08:00

    • 這是查詢執行的時間戳,表明該查詢是在 2025 年 6 月 11 日 16 點 38 分 44 秒左右執行的。

綜上所述,在這些慢查詢日志記錄中,有的查詢返回了數據并掃描了大量行,有的查詢未返回數據且沒有掃描到行,且很多查詢存在未使用索引的情況,這可能是導致查詢速度慢或效率低的原因之一。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86726.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025 年中國大學生程序設計競賽全國邀請賽(鄭州)暨第七屆CCPC河南省大學生程序設計競賽(補題)

文章目錄 前言F、幻形之路G、直徑與最大獨立集H,樹論函數M, 川陀航空學院總結 前言 本次比賽,只能說太多沒接觸的知識了,還有太容易被題面嚇住。 F、幻形之路 題目鏈接:幻形之路 解題思路: 對于這一題只…

如何使用k8s安裝redis呢

在Kubernetes (k8s) 上安裝Redis 在Kubernetes上安裝Redis有幾種方法,下面我將介紹兩種常見的方式:使用StatefulSet直接部署和使用Helm chart部署。 一、安裝redis 1.1 拉去ARM鏡像(7.4.2) docker pull registry.cn-hangzhou.ali…

SpringBoot的5種日志輸出規范策略

在企業級應用開發中,合理規范的日志記錄是系統穩定運行、問題排查和性能優化的關鍵保障。 SpringBoot作為流行的Java開發框架,提供了強大而靈活的日志支持,但如何建立統一、高效的日志輸出規范卻是許多團隊面臨的挑戰。 本文將介紹SpringBo…

Python Cookbook-7.11 在 PostgreSQL 中儲存 BLOB

任務 需要將 BLOB 存入一個 PostgreSQL 數據庫。 解決方案 PostgreSQL7.2 以及更新的版本支持大對象,而psycopg 模塊提供了二進制轉義函數: import psycopg,cPickle #連接到數據庫,用你的本機來測試數據庫,并獲得游標 connection = psycopg.connect("dbname = test…

Android端口轉發

如上圖所示,有一個Android設備,Android設備里面有主板,主板上有網絡接口和Wi-Fi,網絡接口通過網線連接了一個網絡攝像頭,這就跟電腦一樣,電腦即可以通過網線接入一個網絡,也可以同時用Wi-Fi接入…

Unity基礎-協程

Unity基礎-協程 四、協程 概述 協程(Coroutine),本質上并不是多線程,而是在當前線程中將代碼分時執行,不卡主線程。可以理解為,協程會把可能使主線程卡頓的程序分時分布進行。 協程通常用來:…

UniApp組件封裝,2025年最新HarmonyOS鴻蒙模塊化開發項目式教程

一、環境配置與前置條件 ?開發工具要求? HBuilderX 4.64(鴻蒙插件已預裝)DevEco Studio 5.0.3.400(真機調試必備)鴻蒙離線SDK(通過HBuilderX導入,每個項目獨立配置) ?項目初始化 # 創建Vu…

C++ 精簡知識點

目錄 一、核心語法 1.指針VS引用 2. 類與對象(必寫代碼) 3. 繼承與多態(必寫代碼) 4. 模板(必寫代碼) 5.智能指針 6. 異常處理(必寫結構) 二、簡答題速記 三、考試應急策略 一…

7.Vue的compute計算屬性

3.8. 【computed】 作用&#xff1a;根據已有數據計算出新數據&#xff08;和Vue2中的computed作用一致&#xff09;。 <template><div class"person">姓&#xff1a;<input type"text" v-model"firstName"> <br>名&am…

在VSCode中借助AI豐富C++Qt應用程序

隨著國內外各類自動化編程助手的普及&#xff0c;作為傳統桌面C開發者&#xff0c;也要及時地用上這樣強大的工具。考慮到網速問題&#xff0c;國外的服務時斷時續&#xff0c;還是傾向于使用一些國產的大語言模型助手。我們今天就來看看在VSCode下使用大語言模型輔助Qt開發。 …

Java八股文——JVM「內存模型篇」

JVM的內存模型介紹一下 面試官您好&#xff0c;您問的“JVM內存模型”&#xff0c;這是一個非常核心的問題。在Java技術體系中&#xff0c;這個術語通常可能指代兩個不同的概念&#xff1a;一個是JVM的運行時數據區&#xff0c;另一個是Java內存模型&#xff08;JMM&#xff0…

RabbitMQ 高可用與可靠性保障實現

RabbitMQ 高可用與可靠性保障實現詳解 一、高可用架構設計1.1 集群部署模式1.2 鏡像隊列&#xff08;Mirrored Queue&#xff09; 二、可靠性保障機制2.1 消息持久化2.2 確認機制&#xff08;Confirm & Ack&#xff09;2.3 死信隊列&#xff08;DLX&#xff09; 三、容災與…

12.7Swing控件6 JList

在 Java Swing 中&#xff0c;列表框&#xff08;JList&#xff09;是用于顯示一組選項的組件&#xff0c;用戶可以從中選擇一個或多個項目。以下是關于 Swing 列表框的詳細介紹&#xff1a; 1. 基本概念與用途 作用&#xff1a;以垂直列表形式展示選項&#xff0c;支持單選或…

C++: condition_variable: wait_for -> unlock_wait_for_lock?

作為C++的初學者,面臨的一個很大的問題,就是很多的概念并不是可以通過名稱直觀的預知它要完成的細節,比如這里的condition_variable的wait_for。C++的設計意圖好像是,我告訴你這樣用,你只要這樣做就行,又簡單還實用!而且需要記住的規則量又大的驚人。最后看起來,更像是…

HTML版英語學習系統

HTML版英語學習系統 這是一個完全免費、無需安裝、功能完整的英語學習工具&#xff0c;使用HTML CSS JavaScript實現。 功能 文本朗讀練習 - 輸入英文文章&#xff0c;系統朗讀幫助練習聽力和發音&#xff0c;適合跟讀練習&#xff0c;模仿學習&#xff1b;實時詞典查詢 - 雙…

【JUC面試篇】Java并發編程高頻八股——線程與多線程

目錄 1. 什么是進程和線程&#xff1f;有什么區別和聯系&#xff1f; 2. Java的線程和操作系統的線程有什么區別&#xff1f; 3. 線程的創建方式有哪些? 4. 如何啟動和停止線程&#xff1f; 5. Java線程的狀態模型&#xff08;有哪些狀態&#xff09;&#xff1f; 6. 調用…

LSTM-SVM多變量時序預測(Matlab完整源碼和數據)

LSTM-SVM多變量時序預測&#xff08;Matlab完整源碼和數據&#xff09; 目錄 LSTM-SVM多變量時序預測&#xff08;Matlab完整源碼和數據&#xff09;效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 代碼主要功能 該代碼實現了一個LSTM-SVM多變量時序預測模型&#xff0c…

ES6——數組擴展之Set數組

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;JavaScript的Set對象提供了一種存儲任何值唯一性的方式&#xff0c;類似于數組但又不需要索引訪問。這對于需要確保元素唯一性的場景非常有用。Set對象本身并不直接提供數組那樣的方法來操作數據&#xff08;例如ma…

日志收集工具-logstash

提示&#xff1a;Windows 環境下 安裝部署 logstash 采集日志文件 文章目錄 一、下載二、解壓部署三、常用插件四、常用配置 Logstash 服務器數據處理管道&#xff0c;能夠從多個來源采集數據&#xff0c;轉換數據&#xff0c;然后將數據發送到您最喜歡的存儲庫中。Logstash 沒…

6個月Python學習計劃 Day 21 - Python 學習前三周回顧總結

? 第一周&#xff1a;基礎入門與流程控制&#xff08;Day 1 - 7&#xff09; “打地基”的一周&#xff0c;我們走完了從變量、輸入輸出、判斷、循環到第一個小型系統的完整鏈路。 &#x1f4d8; 學習重點&#xff1a; Python 基礎語法&#xff1a;變量類型、字符串格式化、注…