最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶大家深入了解下MySQL中的慢查詢日志

 更新時間:2026年01月03日 09:24:59   作者:程序員小假  
慢查詢日志(Slow Query Log) 是 MySQL 內置的一種日志功能,用于記錄執(zhí)行時間超過指定閾值的 SQL 語句,下面小編就和大家簡單聊聊慢查詢日志的相關配置和應用吧

一、什么是慢查詢日志

慢查詢日志(Slow Query Log) 是 MySQL 內置的一種日志功能,用于記錄執(zhí)行時間超過指定閾值的 SQL 語句。這是優(yōu)化數(shù)據(jù)庫性能的重要工具。

二、核心作用

  • 性能診斷:找出執(zhí)行效率低的 SQL 語句
  • 瓶頸定位:分析查詢?yōu)槭裁绰ㄈ頀呙琛⑺饕笔У龋?/li>
  • 優(yōu)化依據(jù):為 SQL 優(yōu)化和索引調整提供數(shù)據(jù)支持

三、配置參數(shù)詳解

-- 查看所有慢查詢相關參數(shù)
SHOW VARIABLES LIKE '%slow%';
SHOW VARIABLES LIKE '%long_query_time%';

-- 主要配置參數(shù):
-- slow_query_log = OFF/ON          # 是否開啟慢查詢日志
-- slow_query_log_file = /path/name # 日志文件路徑
-- long_query_time = 10             # 閾值(秒),默認10秒
-- min_examined_row_limit = 0       # 最少檢查行數(shù)閾值
-- log_queries_not_using_indexes = OFF # 是否記錄未使用索引的查詢
-- log_slow_admin_statements = OFF  # 是否記錄管理語句
-- log_output = FILE/TABLE/NONE     # 輸出方式

四、開啟和配置

1. 臨時開啟(重啟失效)

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;      -- 設為2秒
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';

2. 永久開啟(修改配置文件)

# my.cnf 或 my.ini
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
log_output = FILE

五、慢查詢日志格式分析

典型日志條目

# Time: 2024-01-01T10:00:00.123456Z
# User@Host: root[root] @ localhost []  Id:     5
# Query_time: 5.123456  Lock_time: 0.001000  Rows_sent: 10  Rows_examined: 1000000
SET timestamp=1672560000;
SELECT * FROM users WHERE last_name LIKE '%smith%' ORDER BY create_time DESC;

關鍵字段解釋

  • Query_time:查詢執(zhí)行總時間
  • Lock_time:鎖定時間
  • Rows_sent:返回給客戶端的行數(shù)
  • Rows_examined:掃描的行數(shù)
  • Rows_affected:影響的行數(shù)(UPDATE/DELETE/INSERT)

六、慢查詢分析工具

1.mysqldumpslow(MySQL 自帶)

# 按查詢時間排序
mysqldumpslow -s t /var/log/mysql/slow.log

# 按鎖時間排序
mysqldumpslow -s l /var/log/mysql/slow.log

# 按執(zhí)行次數(shù)排序
mysqldumpslow -s c /var/log/mysql/slow.log

# 顯示前10條最慢的查詢
mysqldumpslow -t 10 /var/log/mysql/slow.log

# 分析特定用戶的慢查詢
mysqldumpslow -a -g "root" /var/log/mysql/slow.log

2.pt-query-digest(Percona Toolkit)

# 分析慢查詢日志
pt-query-digest /var/log/mysql/slow.log

# 分析最近12小時的慢查詢
pt-query-digest --since=12h /var/log/mysql/slow.log

# 輸出到文件
pt-query-digest /var/log/mysql/slow.log > slow_report.txt

3.mysqlslow(第三方工具)

mysqlslow /var/log/mysql/slow.log

七、慢查詢日志表模式

啟用表模式存儲

SET GLOBAL log_output = 'TABLE';
SET GLOBAL slow_query_log = 'ON';

-- 查詢慢查詢日志
SELECT * FROM mysql.slow_log;

表結構

SHOW CREATE TABLE mysql.slow_log;

-- 主要字段:
-- start_time: 查詢開始時間
-- query_time: 查詢耗時
-- lock_time: 鎖定時間
-- rows_sent: 返回行數(shù)
-- rows_examined: 檢查行數(shù)
-- sql_text: SQL語句
-- user_host: 用戶和主機信息

八、最佳實踐和優(yōu)化建議

1.閾值設置建議

-- 生產(chǎn)環(huán)境建議
SET GLOBAL long_query_time = 2;    -- 2秒閾值

-- 開發(fā)/測試環(huán)境可以更嚴格
SET GLOBAL long_query_time = 0.5;  -- 500毫秒

-- 微秒級精度(MySQL 5.7+)
SET GLOBAL long_query_time = 0.1;  -- 100毫秒

2.日志輪轉配置

# 使用 logrotate
/var/log/mysql/slow.log {
    daily
    rotate 30
    missingok
    compress
    delaycompress
    notifempty
    create 640 mysql mysql
    postrotate
        mysqladmin flush-logs
    endscript
}

3.定期分析計劃

# 每日分析腳本示例
#!/bin/bash
DATE=$(date +%Y%m%d)
pt-query-digest /var/log/mysql/slow.log > /var/log/mysql/slow_report_${DATE}.txt
# 清空日志文件(先備份)
cp /var/log/mysql/slow.log /var/log/mysql/slow.log.${DATE}
echo "" > /var/log/mysql/slow.log

九、性能監(jiān)控和告警

1. 監(jiān)控慢查詢數(shù)量

-- 監(jiān)控每分鐘的慢查詢數(shù)量
SHOW GLOBAL STATUS LIKE 'Slow_queries';

-- 查看當前慢查詢
SHOW PROCESSLIST;

2. 慢查詢告警腳本

#!/bin/bash
SLOW_COUNT=$(mysql -e "SHOW GLOBAL STATUS LIKE 'Slow_queries'" | grep Slow_queries | awk '{print $2}')
THRESHOLD=100

if [ $SLOW_COUNT -gt $THRESHOLD ]; then
    echo "警告:慢查詢數(shù)量異常!當前數(shù)量: $SLOW_COUNT" | mail -s "MySQL慢查詢告警" admin@example.com
fi

十、注意事項

性能影響:開啟慢查詢日志會有約1-3%的性能開銷

磁盤空間:定期清理,避免日志文件過大

敏感信息:日志可能包含敏感數(shù)據(jù),需妥善保管

生產(chǎn)環(huán)境:建議設置合理的閾值,避免記錄過多無關查詢

版本差異:MySQL 5.7+ 支持微秒級精度,之前版本只到秒

面試回答

簡單來說,慢查詢日志就像是 MySQL 的一個‘病歷本’。它會自動記錄下來所有執(zhí)行時間超過某個閾值的 SQL 語句。這樣我們開發(fā)或者 DBA 就能知道,哪些查詢是‘慢’的、有問題的,然后去針對性地優(yōu)化。

在實際工作中,我主要會關注和操作這么幾個方面:

第一,怎么開啟和設置。

慢查詢日志默認是關閉的,因為它會有一點磁盤 I/O 的開銷。我們需要在 MySQL 配置文件(比如 my.cnf)里設置幾個核心參數(shù):

  • slow_query_log = ON:打開開關。
  • slow_query_log_file:指定這個‘病歷本’文件存哪里。
  • long_query_time:這是最重要的一個閾值,單位是秒。比如設為 1,就意味著執(zhí)行超過 1 秒的 SQL 才會被記錄。這個值可以根據(jù)系統(tǒng)性能要求來調整。
  • log_queries_not_using_indexes:這個我也經(jīng)常會打開。它會記錄那些沒有使用索引的查詢,即使它執(zhí)行得很快。這能幫我們發(fā)現(xiàn)潛在的設計問題。

第二,怎么看這個日志。

日志是文本格式,可以直接看,但不太直觀。我常用的方法是:

  • 用 MySQL 自帶的 mysqldumpslow 工具。這個命令行工具可以對日志進行匯總、排序,比如我們可以用 mysqldumpslow -t 10 -s t 來找出耗時最長的前 10 條 SQL,一目了然。
  • 對于更復雜的分析,我會用 Percona 公司開的 ****pt-query-digest 工具。它功能更強大,能給出非常詳細的報告,比如每個 SQL 的響應時間占比、執(zhí)行次數(shù)、鎖時間等,能幫我快速定位最需要優(yōu)化的‘瓶頸’ SQL。

第三,也是最重要的,找到慢 SQL 后怎么辦。

光找到?jīng)]用,關鍵是要優(yōu)化。我一般的排查思路是:

1、拿到這條慢 SQL,先 explain 命令去看它的執(zhí)行計劃。這是標準動作。我會重點看:

  • 有沒有用到索引(key 字段)。
  • 掃描了多少行(rows 字段)。
  • 查詢類型是不是全表掃描(type 字段,如果是 ALL 就不好了)。

2、根據(jù) ****explain ****的結果,常見的優(yōu)化手段就是:

  • 加索引:這是最有效的辦法之一,檢查 WHERE、ORDER BYJOIN 的字段。
  • 優(yōu)化 SQL 本身:比如避免 SELECT *,檢查是否有復雜的子查詢能不能改寫為 JOIN,或者分頁查詢在大偏移量時有沒有優(yōu)化空間。
  • 看看是不是數(shù)據(jù)庫參數(shù)問題,比如緩沖池大小是不是不合理。

最后,我的一點實踐經(jīng)驗是:慢查詢日志在測試環(huán)境和生產(chǎn)環(huán)境都很有用。在項目上線前,我們會開啟它來提前發(fā)現(xiàn)一些性能問題。在生產(chǎn)環(huán)境,我們會長期開啟,但會設置一個合理的 long_query_time(比如從 2 秒開始),并定期歸檔和分析日志,把它作為性能監(jiān)控和容量規(guī)劃的一個重要依據(jù)。

以上就是一文帶大家深入了解下MySQL中的慢查詢日志的詳細內容,更多關于MySQL慢查詢日志的資料請關注腳本之家其它相關文章!

相關文章

  • Centos5.5中安裝Mysql5.5過程分享

    Centos5.5中安裝Mysql5.5過程分享

    這篇文章主要介紹了Centos5.5中安裝Mysql5.5過程分享,本文使用編譯方法安裝MySQL,并給出了一些可能遇到的錯誤和解決方法,需要的朋友可以參考下
    2015-01-01
  • MySQL創(chuàng)建和刪除數(shù)據(jù)庫的命令及相關PHP腳本的操作方法

    MySQL創(chuàng)建和刪除數(shù)據(jù)庫的命令及相關PHP腳本的操作方法

    這篇文章主要介紹了MySQL創(chuàng)建和刪除數(shù)據(jù)庫的命令及相關PHP腳本的操作方法,這里主要講述Linux中在mysqladmin下的命令操作,需要的朋友可以參考下
    2015-11-11
  • MySQL 使用索引掃描進行排序

    MySQL 使用索引掃描進行排序

    mysql可以使用同一個索引既滿足排序,又用于查找行,因此,如果可能,設計索引時應該盡可能地同時滿足這兩種任務,這樣是最好的。本文將介紹如何利用索引來進行排序
    2021-06-06
  • 盡量避免使用索引合并的場景問題解析

    盡量避免使用索引合并的場景問題解析

    這篇文章主要為大家介紹了盡量避免使用索引合并的場景問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Mysql中的常用調優(yōu)參數(shù)用法及解讀

    Mysql中的常用調優(yōu)參數(shù)用法及解讀

    文章介紹了MySQL數(shù)據(jù)庫的一些關鍵配置參數(shù),包括InnoDB緩沖池、redolog緩沖區(qū)、日志緩沖區(qū)等,并解釋了這些參數(shù)在數(shù)據(jù)庫性能和事務一致性中的作用,文章通過比喻和實際建議幫助讀者理解這些配置參數(shù)的合理設置
    2025-12-12
  • 從基礎到高級應用詳解MySQL中的連表更新

    從基礎到高級應用詳解MySQL中的連表更新

    在數(shù)據(jù)庫操作中,連表更新是一種強大但常被低估的功能,本文將系統(tǒng)講解MySQL連表更新的語法、使用場景、性能優(yōu)化及實戰(zhàn)案例,幫助讀大家掌握這一高效的數(shù)據(jù)操作技巧
    2026-01-01
  • MySQL索引失效的幾種情況匯總

    MySQL索引失效的幾種情況匯總

    這篇文章主要介紹了MySQL索引失效的幾種情況,幫助大家更好的理解和使用MySQL索引,感興趣的朋友可以了解下
    2020-09-09
  • MySql查詢某個時間段內的數(shù)據(jù)實例(前一周、前三個月、前一年等)

    MySql查詢某個時間段內的數(shù)據(jù)實例(前一周、前三個月、前一年等)

    在實際工作中需要整理一份時間在規(guī)定時間前后的統(tǒng)計表,下面這篇文章主要給大家介紹了關于MySql查詢某個時間段內的數(shù)據(jù)的相關資料,包括前一周、前三個月、前一年等,需要的朋友可以參考下
    2022-10-10
  • MySQL中讀寫分離方案對比分析與選型建議

    MySQL中讀寫分離方案對比分析與選型建議

    MySQL讀寫分離是提升數(shù)據(jù)庫可用性和性能的常見手段,本文將圍繞現(xiàn)實生產(chǎn)環(huán)境中常見的幾種讀寫分離模式進行系統(tǒng)對比,希望對大家有所幫助
    2025-08-08
  • MySQL系列之十三 MySQL的復制

    MySQL系列之十三 MySQL的復制

    這篇文章主要介紹了MySQL系列之十三 MySQL的復制,詳細的講述了多種復制架構的案例和MySQL復制相關概念等,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07

最新評論

揭阳市| 吉木萨尔县| 乐亭县| 灵璧县| 灵丘县| 金阳县| 鸡东县| 溆浦县| 板桥市| 邳州市| 双桥区| 克拉玛依市| 西贡区| SHOW| 万载县| 永昌县| 常山县| 尉氏县| 南华县| 错那县| 龙胜| 喀喇沁旗| 内黄县| 柳州市| 吴桥县| 海淀区| 开原市| 商都县| 绥滨县| 宣武区| 毕节市| 麦盖提县| 大竹县| 巴东县| 屏山县| 滨海县| 文登市| 双辽市| 甘洛县| 邢台市| 合作市|