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

在MySQL中分析平均響應(yīng)時(shí)間最長(zhǎng)的SQL的六種方法

 更新時(shí)間:2025年10月23日 09:08:11   作者:學(xué)亮編程手記  
這篇文章主要介紹了在MySQL中分析平均響應(yīng)時(shí)間最長(zhǎng)的SQL的六種方法,主要方法包括使用PerformanceSchema、SysSchema、慢查詢?nèi)罩?、詳?xì)性能分析、按模式分類、實(shí)時(shí)監(jiān)控和快照對(duì)比,推薦結(jié)合使用,需要的朋友可以參考下

在MySQL中分析平均響應(yīng)時(shí)間最長(zhǎng)的SQL,主要有以下幾種方法:

1. 使用Performance Schema(推薦)

查詢平均執(zhí)行時(shí)間最長(zhǎng)的SQL

SELECT 
    DIGEST_TEXT AS query,
    SCHEMA_NAME AS db,
    COUNT_STAR AS exec_count,
    ROUND(AVG_TIMER_WAIT/1000000000000, 6) AS avg_exec_time_sec,
    ROUND(MAX_TIMER_WAIT/1000000000000, 6) AS max_exec_time_sec,
    ROUND(SUM_TIMER_WAIT/1000000000000, 6) AS total_exec_time_sec,
    SUM_ROWS_EXAMINED AS rows_examined,
    SUM_ROWS_SENT AS rows_sent,
    SUM_CREATED_TMP_TABLES AS tmp_tables,
    SUM_SORT_MERGE_PASSES AS sort_merge_passes
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT IS NOT NULL
AND COUNT_STAR > 0
ORDER BY avg_exec_time_sec DESC
LIMIT 15;

2. 使用Sys Schema(MySQL 5.7+)

查看平均執(zhí)行時(shí)間最長(zhǎng)的語(yǔ)句

-- 按平均執(zhí)行時(shí)間排序
SELECT 
    query,
    db,
    exec_count,
    total_latency,
    avg_latency,
    max_latency,
    rows_sent_avg,
    rows_examined_avg
FROM sys.statement_analysis
ORDER BY avg_latency DESC
LIMIT 15;

-- 查看95%分位的慢查詢
SELECT 
    query,
    db,
    exec_count,
    total_latency,
    avg_latency,
    max_latency
FROM sys.statements_with_runtimes_in_95th_percentile
ORDER BY avg_latency DESC
LIMIT 15;

3. 使用慢查詢?nèi)罩痉治?/h2>

使用mysqldumpslow

# 按平均查詢時(shí)間排序
mysqldumpslow -s at -t 10 /var/log/mysql/slow.log

4. 詳細(xì)的Performance Schema分析

包含更多性能指標(biāo)

SELECT 
    DIGEST_TEXT AS query,
    SCHEMA_NAME AS db,
    COUNT_STAR AS exec_count,
    
    -- 時(shí)間統(tǒng)計(jì)(單位:秒)
    ROUND(AVG_TIMER_WAIT/1000000000000, 4) AS avg_exec_time_sec,
    ROUND(MAX_TIMER_WAIT/1000000000000, 4) AS max_exec_time_sec,
    ROUND(SUM_TIMER_WAIT/1000000000000, 4) AS total_exec_time_sec,
    
    -- 鎖時(shí)間統(tǒng)計(jì)
    ROUND(AVG_LOCK_TIMER_WAIT/1000000000000, 4) AS avg_lock_time_sec,
    
    -- 行統(tǒng)計(jì)
    SUM_ROWS_EXAMINED AS rows_examined,
    SUM_ROWS_SENT AS rows_sent,
    SUM_ROWS_AFFECTED AS rows_affected,
    ROUND(SUM_ROWS_EXAMINED / COUNT_STAR, 0) AS avg_rows_examined,
    ROUND(SUM_ROWS_SENT / COUNT_STAR, 0) AS avg_rows_sent,
    
    -- 臨時(shí)表和文件排序
    SUM_CREATED_TMP_TABLES AS tmp_tables,
    SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables,
    SUM_SORT_MERGE_PASSES AS sort_merge_passes,
    SUM_SORT_ROWS AS sort_rows,
    
    -- 錯(cuò)誤和警告
    SUM_ERRORS AS errors,
    SUM_WARNINGS AS warnings,
    
    FIRST_SEEN AS first_seen,
    LAST_SEEN AS last_seen
    
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT IS NOT NULL
AND COUNT_STAR > 0
HAVING avg_exec_time_sec > 0.001  -- 只關(guān)注平均執(zhí)行時(shí)間大于1ms的查詢
ORDER BY avg_exec_time_sec DESC
LIMIT 20;

5. 按模式分類分析

分析不同類型的SQL性能

SELECT 
    CASE 
        WHEN DIGEST_TEXT LIKE 'SELECT%' THEN 'SELECT'
        WHEN DIGEST_TEXT LIKE 'INSERT%' THEN 'INSERT'
        WHEN DIGEST_TEXT LIKE 'UPDATE%' THEN 'UPDATE'
        WHEN DIGEST_TEXT LIKE 'DELETE%' THEN 'DELETE'
        ELSE 'OTHER'
    END AS sql_type,
    COUNT(*) AS query_count,
    ROUND(AVG(AVG_TIMER_WAIT/1000000000000), 4) AS avg_exec_time_sec,
    ROUND(MAX(MAX_TIMER_WAIT/1000000000000), 4) AS max_exec_time_sec,
    SUM(COUNT_STAR) AS total_executions
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT IS NOT NULL
GROUP BY sql_type
ORDER BY avg_exec_time_sec DESC;

6. 實(shí)時(shí)監(jiān)控長(zhǎng)時(shí)間運(yùn)行的查詢

-- 查看當(dāng)前正在執(zhí)行的慢查詢
SELECT 
    p.ID AS process_id,
    p.USER AS user,
    p.HOST AS host,
    p.DB AS database_name,
    p.TIME AS execution_time_sec,
    p.COMMAND AS command,
    p.STATE AS state,
    LEFT(p.INFO, 200) AS query_snippet
FROM INFORMATION_SCHEMA.PROCESSLIST p
WHERE p.COMMAND = 'Query'
AND p.TIME > 5  -- 執(zhí)行時(shí)間超過(guò)5秒的查詢
ORDER BY p.TIME DESC;

7. 定期性能快照對(duì)比

-- 創(chuàng)建性能快照表(用于趨勢(shì)分析)
CREATE TABLE IF NOT EXISTS query_performance_snapshot (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    snapshot_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    digest VARCHAR(64),
    query_text TEXT,
    avg_exec_time_sec DECIMAL(10,6),
    exec_count BIGINT,
    db_name VARCHAR(64)
);

-- 插入當(dāng)前性能數(shù)據(jù)
INSERT INTO query_performance_snapshot (digest, query_text, avg_exec_time_sec, exec_count, db_name)
SELECT 
    DIGEST AS digest,
    LEFT(DIGEST_TEXT, 1000) AS query_text,
    ROUND(AVG_TIMER_WAIT/1000000000000, 6) AS avg_exec_time_sec,
    COUNT_STAR AS exec_count,
    SCHEMA_NAME AS db_name
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT IS NOT NULL
AND COUNT_STAR > 0;

-- 查詢性能變化趨勢(shì)
SELECT 
    query_text,
    AVG(avg_exec_time_sec) AS historical_avg,
    MAX(avg_exec_time_sec) AS historical_max,
    COUNT(*) AS snapshot_count
FROM query_performance_snapshot
GROUP BY digest, query_text
ORDER BY historical_avg DESC
LIMIT 10;

使用建議

  • 生產(chǎn)環(huán)境推薦:使用Performance Schema + Sys Schema組合
  • 深度分析:結(jié)合慢查詢?nèi)罩臼褂胮t-query-digest
  • 實(shí)時(shí)監(jiān)控:設(shè)置閾值告警長(zhǎng)時(shí)間運(yùn)行的查詢
  • 定期審查:建立定期性能分析機(jī)制

以上就是在MySQL中分析平均響應(yīng)時(shí)間最長(zhǎng)的SQL的六種方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL分析平均響應(yīng)時(shí)間最長(zhǎng)的SQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL追蹤數(shù)據(jù)庫(kù)表更新操作來(lái)源的全面指南

    MySQL追蹤數(shù)據(jù)庫(kù)表更新操作來(lái)源的全面指南

    本文將以一個(gè)具體問(wèn)題為例,如何監(jiān)測(cè)哪個(gè)IP來(lái)源對(duì)數(shù)據(jù)庫(kù)表?statistics_test?進(jìn)行了UPDATE操作,文內(nèi)探討了多種方法,并提供了詳細(xì)的代碼示例,需要的可以了解下
    2025-06-06
  • Navicat連接MySQL提示1045錯(cuò)誤解決(重置MySQL密碼)

    Navicat連接MySQL提示1045錯(cuò)誤解決(重置MySQL密碼)

    連接MySQL數(shù)據(jù)庫(kù)時(shí)難免會(huì)遇到1045錯(cuò)誤,主要是因?yàn)橛脩糨斎氲挠脩裘蛎艽a錯(cuò)誤被拒絕訪問(wèn),如果不想重裝,需要找回密碼或者重置密碼,這篇文章主要給大家介紹了關(guān)于Navicat連接MySQL提示1045錯(cuò)誤解決的方法,主要是重置MySQL密碼,需要的朋友可以參考下
    2023-04-04
  • SQL中distinct去重關(guān)鍵字使用和count統(tǒng)計(jì)組合使用方法

    SQL中distinct去重關(guān)鍵字使用和count統(tǒng)計(jì)組合使用方法

    這篇文章主要給大家介紹了關(guān)于SQL中distinct去重關(guān)鍵字使用和count統(tǒng)計(jì)組合使用的相關(guān)資料,count()是SQL中提供的用于統(tǒng)計(jì)記錄數(shù)量的函數(shù),需要的朋友可以參考下
    2024-08-08
  • MYSQL常用命令與實(shí)用技巧

    MYSQL常用命令與實(shí)用技巧

    MYSQL常用命令與實(shí)用技巧...
    2007-07-07
  • 如何修改mysql的隔離級(jí)別

    如何修改mysql的隔離級(jí)別

    MySQL的隔離級(jí)別是指數(shù)據(jù)庫(kù)事務(wù)的隔離程度,用于控制并發(fā)事務(wù)之間的相互影響,本文就詳細(xì)的介紹一下如何修改mysql的隔離級(jí)別,感興趣的可以了解一下
    2023-08-08
  • mysql?DISTINCT選取多個(gè)字段,獲取distinct后的行信息方式

    mysql?DISTINCT選取多個(gè)字段,獲取distinct后的行信息方式

    這篇文章主要介紹了mysql?DISTINCT選取多個(gè)字段,獲取distinct后的行信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySql中的IFNULL、NULLIF和ISNULL用法詳解

    MySql中的IFNULL、NULLIF和ISNULL用法詳解

    本文主要介紹了MySql中的IFNULL、NULLIF和ISNULL用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • MySql中的Full?Text?Search全文索引優(yōu)化

    MySql中的Full?Text?Search全文索引優(yōu)化

    這篇文章主要為大家介紹了MySql中的Full?Text?Search全文索引優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 深入解析MySQL中的Redo Log、Undo Log和Binlog

    深入解析MySQL中的Redo Log、Undo Log和Binlog

    本文詳細(xì)介紹了MySQL中的RedoLog、UndoLog和Binlog的背景、業(yè)務(wù)場(chǎng)景、功能、底層實(shí)現(xiàn)原理以及使用措施,通過(guò)Java代碼示例展示了如何與這些日志進(jìn)行交互,進(jìn)一步深化了對(duì)MySQL日志系統(tǒng)的理解,理解并合理使用這些日志,可以有效地提升數(shù)據(jù)庫(kù)的性能和可靠性
    2024-10-10
  • 如何通過(guò)mysql-connector-java實(shí)現(xiàn)Java與MySQL的連接詳解

    如何通過(guò)mysql-connector-java實(shí)現(xiàn)Java與MySQL的連接詳解

    在Java中連接MySQL數(shù)據(jù)庫(kù)是實(shí)現(xiàn)數(shù)據(jù)持久化存儲(chǔ)和讀取的重要技能之一,這篇文章主要介紹了如何通過(guò)mysql-connector-java實(shí)現(xiàn)Java與MySQL連接的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-08-08

最新評(píng)論

长汀县| 霍州市| 宕昌县| 河北区| 泸水县| 丘北县| 玉溪市| 门头沟区| 绥棱县| 凌海市| 张家口市| 兖州市| 广安市| 雷州市| 柘城县| 襄垣县| 疏附县| 武穴市| 高邮市| 浑源县| 中卫市| 普兰县| 沂水县| 鹿泉市| 建始县| 隆尧县| 宜章县| 星座| 珠海市| 调兵山市| 禄丰县| 双城市| 广丰县| 贡觉县| 司法| 龙南县| 林芝县| 宣武区| 长海县| 博爱县| 邹城市|