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

MySQL 慢查詢排查的實(shí)現(xiàn)

 更新時間:2026年07月29日 09:06:13   作者:長大1988  
本文主要介紹了MySQL 慢查詢排查的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

這是一套可直接上手的排查方案,從發(fā)現(xiàn)問題到定位根因,再到優(yōu)化落地,覆蓋全鏈路。

第一步:確認(rèn)慢查詢是否存在

1.1 開啟慢查詢?nèi)罩?/h3>
-- 查看當(dāng)前狀態(tài)
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';

-- 臨時開啟(重啟失效)
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;  -- 超過1秒記錄
SET GLOBAL log_queries_not_using_indexes = ON;

1.2 查看慢查詢數(shù)量與內(nèi)容

# 統(tǒng)計慢查詢次數(shù)
SHOW GLOBAL STATUS LIKE '%Slow_queries%';

# 查看最近慢查詢?nèi)罩疚募窂?
SHOW VARIABLES LIKE 'slow_query_log_file';

第二步:分析慢查詢語句

2.1 使用 EXPLAIN 分析執(zhí)行計劃

EXPLAIN SELECT * FROM orders WHERE status = 1 ORDER BY created_at DESC LIMIT 100;

重點(diǎn)關(guān)注字段:

字段危險信號
typeALL(全表掃描)、index(索引全掃)
rows遠(yuǎn)大于預(yù)期返回行數(shù)
ExtraUsing filesort(文件排序)、Using temporary(臨時表)

2.2 使用 SHOW PROFILE 查看耗時分布

-- 開啟 profiling
SET profiling = 1;

-- 執(zhí)行你的慢查詢
SELECT * FROM orders WHERE ...;

-- 查看所有查詢的耗時
SHOW PROFILES;

-- 查看具體某個 Query_ID 的詳細(xì)耗時
SHOW PROFILE FOR QUERY 1;

關(guān)鍵看 Sending data、Sorting result、Creating tmp table 等步驟的耗時占比。

第三步:常見原因與對應(yīng)解決方案

3.1 沒走索引 → 加索引

-- 檢查是否有可用索引
SHOW INDEX FROM orders;

-- 添加復(fù)合索引(注意字段順序:等值條件在前,范圍條件在后)
ALTER TABLE orders ADD INDEX idx_status_created (status, created_at);

3.2 索引失效 → 改寫 SQL

常見導(dǎo)致索引失效的操作:

  • 對索引列使用函數(shù):WHERE DATE(created_at) = '2024-01-01'
  • 隱式類型轉(zhuǎn)換:WHERE user_id = '123'(user_id 是 int)
  • 前導(dǎo)模糊匹配:WHERE name LIKE '%張三'

3.3 數(shù)據(jù)量過大 → 分頁優(yōu)化 / 歸檔

深分頁優(yōu)化示例

-- 原始寫法(越往后越慢)
SELECT * FROM orders ORDER BY id LIMIT 100000, 20;

-- 優(yōu)化寫法(子查詢用覆蓋索引)
SELECT * FROM orders 
WHERE id > (SELECT id FROM orders ORDER BY id LIMIT 100000, 1)
ORDER BY id LIMIT 20;

數(shù)據(jù)歸檔: ? 將歷史數(shù)據(jù)遷移到歸檔表或分區(qū)表。

3.4 鎖等待 → 排查鎖沖突

-- 查看當(dāng)前正在等待鎖的事務(wù)
SELECT * FROM information_schema.INNODB_TRX\G

-- 查看鎖等待關(guān)系
SELECT * FROM sys.schema_table_lock_waits;

-- 強(qiáng)制結(jié)束阻塞事務(wù)(慎用)
KILL [trx_mysql_thread_id];

3.5 SQL 寫得爛 → 重寫

典型壞寫法:

  • SELECT * → 只取需要的列
  • 子查詢嵌套過深 → 改用 JOIN 或臨時表
  • OR 條件 → 拆成 UNION ALL
  • 循環(huán)查詢 → 批量查詢 + IN

第四步:系統(tǒng)層面排查

4.1 查看數(shù)據(jù)庫配置是否合理

-- 關(guān)鍵參數(shù)檢查
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';    -- 建議設(shè)為內(nèi)存的60%-70%
SHOW VARIABLES LIKE 'tmp_table_size';              -- 臨時表大小限制
SHOW VARIABLES LIKE 'max_connections';             -- 連接數(shù)是否過高

4.2 查看服務(wù)器資源

# CPU、內(nèi)存、IO 情況
top
iostat -x 1
free -h

如果 CPU 高但 IO 低 → SQL 計算量大或索引不合理

如果 IO 高但 CPU 低 → 磁盤瓶頸,考慮 SSD 或增加 buffer pool

第五步:建立長效機(jī)制

5.1 定期巡檢腳本

-- 查詢當(dāng)前運(yùn)行時間最長的SQL
SELECT * FROM information_schema.PROCESSLIST 
WHERE COMMAND != 'Sleep'
ORDER BY TIME DESC LIMIT 10;

-- 查詢?nèi)頀呙璐螖?shù)最多的表
SELECT * FROM sys.schema_unused_indexes;

5.2 監(jiān)控告警

  • 設(shè)置 long_query_time = 1,持續(xù)采集慢查詢?nèi)罩?/li>
  • 使用 Percona Toolkit 的 pt-query-digest 分析日志規(guī)律
  • 接入 Prometheus + Grafana 監(jiān)控 QPS、慢查詢數(shù)量趨勢

一句話總結(jié)排查思路

先確認(rèn)慢在哪(日志+profile),再看為什么慢(explain+索引),最后對癥下藥(加索引/改SQL/擴(kuò)資源)。

到此這篇關(guān)于MySQL 慢查詢排查的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 慢查詢排查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL間隙鎖解決幻讀問題

    MySQL間隙鎖解決幻讀問題

    本文主要介紹了MySQL間隙鎖解決幻讀問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • MySQL同步ES的主流方案匯總

    MySQL同步ES的主流方案匯總

    在日常開發(fā)中,我們經(jīng)常遇到這樣的場景:MySQL作為核心數(shù)據(jù)庫存儲業(yè)務(wù)數(shù)據(jù),而Elasticsearch(ES)則承擔(dān)著全文檢索和數(shù)據(jù)分析的重任,如何讓MySQL和ES保持?jǐn)?shù)據(jù)一致性,成了每個后端工程師都繞不開的問題,所以本文給大家介紹了MySQL同步ES的5種主流方案
    2026-03-03
  • MySQL數(shù)據(jù)庫健康檢查從腳本到全面巡檢的完整方案

    MySQL數(shù)據(jù)庫健康檢查從腳本到全面巡檢的完整方案

    在數(shù)據(jù)庫運(yùn)維工作中,定期對MySQL數(shù)據(jù)庫進(jìn)行健康檢查是保證系統(tǒng)穩(wěn)定運(yùn)行的重要環(huán)節(jié),一個完善的數(shù)據(jù)庫巡檢方案可以幫助DBA及時發(fā)現(xiàn)潛在問題,優(yōu)化性能,預(yù)防故障發(fā)生,本文將基于多個優(yōu)秀的MySQL巡檢腳本實(shí)現(xiàn),整理出一套完整的MySQL健康檢查方案,需要的朋友可以參考下
    2025-11-11
  • MySQL連接控制插件介紹

    MySQL連接控制插件介紹

    當(dāng)連接數(shù)據(jù)庫失敗次數(shù)過多時,MySQL 是否會限制登錄呢?數(shù)據(jù)庫服務(wù)端應(yīng)該怎么應(yīng)對暴力破解呢?本篇文章介紹下 MySQL 中的連接控制插件,一起來學(xué)習(xí)下此插件的作用,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • mysql正確安全清空在線慢查詢?nèi)罩緎low log的流程分享

    mysql正確安全清空在線慢查詢?nèi)罩緎low log的流程分享

    這篇文章主要介紹了正確安全清空在線慢查詢?nèi)罩緎low log的流程,需要的朋友可以參考下
    2014-02-02
  • MySQL線程處于Opening tables的問題解決方法

    MySQL線程處于Opening tables的問題解決方法

    在本篇文章里小編給大家分享了關(guān)于MySQL線程處于Opening tables的問題解決方法,有興趣的朋友們學(xué)習(xí)下。
    2019-01-01
  • MySQL 復(fù)制表的方法

    MySQL 復(fù)制表的方法

    這篇文章主要介紹了MySQL 復(fù)制表的方法,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • 如何解決mysql出現(xiàn)Incorrect string value for column ‘表項(xiàng)‘ at row 1錯誤問題

    如何解決mysql出現(xiàn)Incorrect string value for co

    這篇文章主要介紹了如何解決mysql出現(xiàn)Incorrect string value for column ‘表項(xiàng)‘ at row 1錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Mysql錯誤1366 - Incorrect integer value解決方法

    Mysql錯誤1366 - Incorrect integer value解決方法

    這篇文章主要介紹了Mysql錯誤1366 - Incorrect integer value解決方法,本文通過修改字段默認(rèn)值解決,需要的朋友可以參考下
    2014-09-09
  • MySQL事務(wù)的SavePoint簡介及操作

    MySQL事務(wù)的SavePoint簡介及操作

    SavePoint是數(shù)據(jù)庫事務(wù)中的一個概念, 可以將整個事務(wù)切割為不同的小事務(wù), 可以選擇將狀態(tài)回滾到某個小事務(wù)發(fā)生時的樣子,本文給大家分享MySQL事務(wù)的SavePoint重要操作,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-01-01

最新評論

延吉市| 修武县| 清徐县| 淮滨县| 南漳县| 镇平县| 当雄县| 长武县| 吉首市| 南城县| 新田县| 大连市| 丹寨县| 横峰县| 额尔古纳市| 新化县| 榆树市| 江口县| 承德县| 从化市| 阳泉市| 济南市| 乐安县| 双桥区| 中超| 竹溪县| 瓦房店市| 昭觉县| 称多县| 襄樊市| 阳西县| 施秉县| 大港区| 黑山县| 青浦区| 永川市| 南宁市| 田林县| 通化市| 开原市| 大洼县|