MySQL 慢查詢日志詳解

慢查詢日志(Slow Query Log)是 MySQL 提供的一種核心性能優化工具,用于記錄執行時間超過指定閾值的 SQL 語句。通過分析這些日志,可以定位數據庫性能瓶頸,優化低效查詢,提升系統整體效率。


一、慢查詢日志的作用
  1. 性能瓶頸定位
    識別執行時間過長的 SQL 語句,幫助找出數據庫性能問題的根源(如索引缺失、復雜查詢、全表掃描等)。
  2. 優化依據
    提供真實的 SQL 執行數據(如執行時間、鎖等待時間、掃描行數等),為優化提供依據。
  3. 系統監控
    監控數據庫長期性能變化趨勢,及時發現潛在問題。
  4. 索引優化
    記錄未使用索引的查詢(需配置 log_queries_not_using_indexes),幫助發現索引缺失或無效使用的情況。

二、如何開啟慢查詢日志
1. 配置文件設置(永久生效)

編輯 MySQL 配置文件(my.cnfmy.ini),在 [mysqld] 段中添加以下參數:

[mysqld]
slow_query_log = 1                  # 開啟慢查詢日志(1 表示開啟)
slow_query_log_file = /path/to/slow.log  # 指定日志文件路徑
long_query_time = 2                 # 定義慢查詢閾值(單位:秒,默認 10 秒)
log_queries_not_using_indexes = 1   # 記錄未使用索引的查詢(可選)
log_output = FILE                   # 日志輸出方式(FILE 或 TABLE)

保存后重啟 MySQL 服務

# Linux 系統
sudo systemctl restart mysqld
2. 動態設置(臨時生效)

通過 MySQL 命令行臨時啟用(重啟后失效):

-- 開啟慢查詢日志
SET GLOBAL slow_query_log = 'ON';
-- 設置慢查詢閾值(需重新連接會話才能生效)
SET GLOBAL long_query_time = 2;
-- 指定日志文件路徑
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- 記錄未使用索引的查詢
SET GLOBAL log_queries_not_using_indexes = 1;
3. 驗證配置

執行以下命令檢查配置是否生效:

SHOW VARIABLES LIKE 'slow_query%';
SHOW GLOBAL VARIABLES LIKE 'long_query_time';

三、核心參數詳解
參數名類型默認值說明
slow_query_logBooleanOFF慢查詢日志總開關
slow_query_log_fileStringhostname-slow.log慢查詢日志文件路徑
long_query_timeFloat10慢查詢閾值(單位:秒)
log_queries_not_using_indexesBooleanOFF是否記錄未使用索引的查詢
min_examined_row_limitInteger0記錄掃描行數超過該值的查詢
log_slow_admin_statementsBooleanOFF是否記錄慢管理語句(如 ALTER/ANALYZE
log_slow_slave_statementsBooleanOFF是否記錄從庫慢查詢

四、日志內容與格式

慢查詢日志記錄了以下信息:

  • SQL 語句:被記錄的查詢語句。
  • 執行時間(Query_time):SQL 執行的總時間。
  • 鎖等待時間(Lock_time):SQL 等待鎖的時間。
  • 返回行數(Rows_sent):返回給客戶端的行數。
  • 掃描行數(Rows_examined):SQL 掃描的行數。
  • 用戶信息:執行查詢的用戶和主機信息。
  • 時間戳:查詢執行的日期和時間。

示例日志內容

# Time: 2025-06-30T17:50:07.123456Z
# User@Host: root[root] @ localhost []
# Query_time: 2.345678  Lock_time: 0.000123  Rows_sent: 100  Rows_examined: 10000
SET timestamp=1720000000;
SELECT * FROM users WHERE created_at > '2025-01-01';

五、日志分析方法
1. 直接查看日志文件

使用命令行工具查看日志文件:

# 查看日志內容
less /var/log/mysql/slow.log# 統計慢查詢數量
grep -c "Query_time" /var/log/mysql/slow.log
2. 使用 MySQL 自帶工具 mysqldumpslow

mysqldumpslow 可以匯總和排序慢查詢日志中的 SQL 語句。

# 按執行時間排序,顯示前10條
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log# 按查詢次數排序,顯示前10條
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
3. 使用第三方工具 pt-query-digest

Percona Toolkit 中的 pt-query-digest 提供更詳細的分析報告:

pt-query-digest /var/log/mysql/slow.log > analysis_report.txt
4. 查詢 mysql.slow_log

如果日志輸出到表(log_output=TABLE),可通過 SQL 直接查詢:

SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;

六、優化慢查詢的典型方法
  1. 添加索引
    對頻繁查詢的字段(如 WHEREJOINORDER BY)添加索引。
    示例

    CREATE INDEX idx_created_at ON users(created_at);
    
  2. 優化 SQL 語句

    • 避免全表掃描(使用 EXPLAIN 分析執行計劃)。
    • 減少子查詢,改用 JOIN
    • 避免 SELECT *,僅查詢必要字段。
  3. 調整配置參數

    • 根據業務需求調整 long_query_time(例如設置為 1 秒)。
    • 啟用 log_queries_not_using_indexes 以發現未使用索引的查詢。
  4. 分頁與緩存

    • 對高頻查詢結果進行緩存(如 Redis)。
    • 使用分頁限制返回行數(如 LIMIT 100)。

七、常見問題與注意事項
  1. 日志文件過大

    • 定期歸檔或清理舊日志,避免磁盤空間不足。
    • 使用 log_output=TABLE 將日志存儲到數據庫表中,便于管理。
  2. 生產環境配置建議

    • 閾值設置:默認閾值為 10 秒,生產環境中建議調低(如 1-2 秒)以捕獲更多潛在問題。
    • 權限問題:確保 MySQL 有權限寫入日志文件路徑。
    • 性能影響:慢查詢日志本身會帶來輕微性能開銷,建議在測試環境調試,生產環境謹慎使用。
  3. 未使用索引的查詢
    啟用 log_queries_not_using_indexes 后,日志可能快速增長,需結合 EXPLAIN 分析是否需要添加索引。


八、實戰案例
案例 1:索引優化

問題:查詢 created_at 范圍內的用戶列表耗時較長。

SELECT * FROM users WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31';

優化:在 created_at 字段上創建索引。

CREATE INDEX idx_created_at ON users(created_at);

效果:查詢時間從 5 秒降至 0.1 秒。

案例 2:復雜查詢優化

問題:關聯查詢訂單和用戶表時響應時間過長。

SELECT o.id, o.total 
FROM orders o 
JOIN users u ON o.user_id = u.id 
WHERE o.order_date BETWEEN '2023-01-01' AND '2023-12-31';

優化

  1. order_date 字段上創建索引:

    CREATE INDEX idx_order_date ON orders(order_date);
    
  2. 使用覆蓋索引優化查詢:

    SELECT o.id, o.total 
    FROM orders o 
    JOIN users u ON o.user_id = u.id 
    WHERE o.order_date BETWEEN '2023-01-01' AND '2023-12-31'
    USE INDEX (idx_order_date);
    

    效果:查詢時間從 3 秒降至 0.3 秒。


九、總結

慢查詢日志是 MySQL 性能優化的核心工具,通過合理配置和分析,可以顯著提升數據庫效率。建議結合 EXPLAIN、索引優化和 SQL 重寫策略,持續監控和調優數據庫性能。

👍 不積跬步,無以至千里
😊 希望對你有幫助!

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

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

相關文章

UV安裝Python指南總結

UV安裝Python指南總結 UV是一個Python包管理工具,它可以幫助我們安裝和管理Python版本。以下是關于UV安裝Python的主要功能和用法總結。 基本使用 安裝最新版Python uv python install注意:UV使用Astral的python-build-standalone項目提供的Python發行版,而不是…

運維基礎-MYSQL數據庫-筆記

序 欠10年前自己的一份筆記,獻給今后的自己。 數據庫介紹 數據的時代 涉及的數據量大數據不隨程序的結束而消失數據被多個應用程序共享大數據 數據庫的發展史 萌芽階段:文件系統 使用磁盤文件來存儲數據初級階段:第一代數據庫 出現了網狀…

從GPTs到Real智能體:目前常見的幾種創建智能體方式

文章目錄 智能體的三個發展階段低階智能體(面向過程) VS 高階智能體(面向目標)主流智能體創建平臺實踐基礎型平臺cherry-studio豆包訊飛星火騰訊元器 高階智能體開發體系cline開發套件Coze平臺Dify開源框架Manus突破性方案 技術演進趨勢總結 智能體的三個發展階段 當前智能體技…

WPF 實現自定義數字輸入彈窗

1.前端代碼實現 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品識別系統flask

查看完整項目包點擊文末名片 項目簡介 本項目 基于YOLO的海洋垃圾物品識別系統 旨在利用深度學習中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;實現對海洋垃圾的自動識別與分類。通過構建一個基于Flask的Web應用&#xff0c;用戶可以方便地上傳圖片&…

從數據到決策:UI前端如何利用數字孿生技術提升管理效率?

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區&#xff0c;企業管理者正面臨數據過載與決策滯后的雙重挑戰 ——IDC 研…

Spring Boot高并發 鎖的使用方法

Spring Boot高并發 鎖的使用方法 在高并發場景中&#xff08;比如電商秒殺、搶票系統、轉賬交易&#xff09;&#xff0c;多個線程/用戶會同時操作同一共享資源&#xff08;如庫存、賬戶余額、訂單號&#xff09;。如果不做控制&#xff0c;會導致數據錯誤&#xff08;如庫存超…

二十九:Dynamic Prompts插件動態提示詞講解

引言:可變化提示詞,隨機抽取不固定 使用方式一:{提示詞1|提示詞2|。。。。}------從提示詞種隨機抽取生成 方式二:{25::提示詞1|75::提示詞2}------數字為每個提示詞的占比,相當于權重 方式三:{2$$提示詞1|提示詞2|提示詞3|提示詞4|。。。}從中選區2個搭配生成(可以換 比…

vscode 改注釋的顏色,默認是灰色的,想改成紅色

修改VScode編輯器默認注釋的顏色_databricks代碼中怎么設置讓注釋是灰色的-CSDN博客 //改變注釋顏色"editor.tokenColorCustomizations": {"comments": "#009933" // 注釋}, //如果后面還加內容&#xff0c;記得塊末用逗號隔開我自己用的vscdoe.…

chili3d筆記22 正交投影3d重建筆記3 面構建

雙視圖重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…

Kotlin 協程使用與通信

一、協程基礎使用 1. 協程的三種創建方式 (1) launch - 啟動后臺作業 val job CoroutineScope(Dispatchers.IO).launch {// 后臺操作delay(1000)println("任務完成 ${Thread.currentThread().name}")// 輸出&#xff1a;任務完成 DefaultDispatcher-worker-1 } j…

Ubuntu服務器(公網)- Ubuntu客戶端(內網)的FRP內網穿透配置教程

以下是為Ubuntu服務器&#xff08;公網&#xff09;- Ubuntu客戶端&#xff08;內網&#xff09;的FRP內網穿透配置教程&#xff0c;基于最新版本&#xff08;2025年6月&#xff0c;使用frp_0.61.1_linux_amd64&#xff09;整理&#xff1a; 一、服務端配置&#xff08;公網Ubu…

什么是哈希函數(SHA-256)

SHA-256 是區塊鏈系統中最核心的加密基礎之一&#xff0c;尤其是在比特幣、以太坊、文件存證等場景中扮演“指紋識別器”的角色。下面是對它的詳細講解&#xff0c;包括原理、特點、用途和代碼示例。 &#x1f4cc; 一、什么是 SHA-256&#xff1f; SHA-256 是一種密碼學哈希函…

大模型的“Tomcat”:一文讀懂AI推理引擎(Inference Engine)

點擊下方“JavaEdge”&#xff0c;選擇“設為星標” 第一時間關注技術干貨&#xff01; 免責聲明~ 任何文章不要過度深思&#xff01; 萬事萬物都經不起審視&#xff0c;因為世上沒有同樣的成長環境&#xff0c;也沒有同樣的認知水平&#xff0c;更「沒有適用于所有人的解決方案…

《從0到1:C/C++音視頻開發自學完全指南》

從0到1&#xff1a;C/C音視頻開發自學完全指南 一、開篇&#xff1a;為什么選擇C/C切入音視頻開發&#xff1f; 當你刷著抖音短視頻、參加騰訊會議、觀看B站直播時&#xff0c;背后都是音視頻技術在支撐。根據艾瑞咨詢數據&#xff0c;2024年中國音視頻相關產業規模已突破5000…

微信小程序之單行溢出隱藏和雙行溢出隱藏

首先&#xff0c;我們做個text&#xff0c;加入了一個長文本&#xff0c;就像下面那樣&#xff1a; wxml : <view class"container"><text>劉德華&#xff08;Andy Lau&#xff09;&#xff0c;1961年9月27日出生于中國香港&#xff0c;華語影視男演員、…

PHP安裝使用教程

一、PHP 簡介 PHP&#xff08;Hypertext Preprocessor&#xff09;是一種廣泛應用的開源服務器端腳本語言&#xff0c;尤其適用于 Web 開發&#xff0c;可嵌入 HTML 中使用。其運行速度快、易學易用&#xff0c;支持多種數據庫和平臺。 二、PHP 安裝教程 2.1 支持平臺 PHP 支…

ThreadLocal、InheritableThreadLocal與TransmittableThreadLocal深度解析

文章目錄 一、概念說明1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 二、使用場景1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 三、存在的問題1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 四、示例…

ERP系統Bug記錄

2025.06.30 2025/06/30-10:51:02 [http-nio-9999-exec-3] com.yxx.jsh.erp.service.LogService - 異常碼[300],異常提示[數據查詢異常],異常[{}] java.lang.NullPointerException: nullat com.yxx.jsh.erp.base.TableSupport.getBuildPageRequest(TableSupport.java:46)at com…

C# Avalonia 的 Source Generators 用處

C# Avalonia 的 Source Generators 用處 文章目錄 **1. 自動生成 MVVM 綁定代碼****2. 強類型 XAML 數據綁定****3. 自動注冊視圖&#xff08;View&#xff09;與視圖模型&#xff08;ViewModel&#xff09;****4. 資源文件與本地化的強類型訪問****5. 路由事件與命令的自動化處…