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

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

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

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

1. 使用Performance Schema(推薦)

查詢平均執(zhí)行時間最長的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í)行時間最長的語句

-- 按平均執(zhí)行時間排序
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

# 按平均查詢時間排序
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,
    
    -- 時間統(tǒng)計(單位:秒)
    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,
    
    -- 鎖時間統(tǒng)計
    ROUND(AVG_LOCK_TIMER_WAIT/1000000000000, 4) AS avg_lock_time_sec,
    
    -- 行統(tǒng)計
    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,
    
    -- 臨時表和文件排序
    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,
    
    -- 錯誤和警告
    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í)行時間大于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. 實時監(jiān)控長時間運(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í)行時間超過5秒的查詢
ORDER BY p.TIME DESC;

7. 定期性能快照對比

-- 創(chuàng)建性能快照表(用于趨勢分析)
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;

-- 查詢性能變化趨勢
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
  • 實時監(jiān)控:設(shè)置閾值告警長時間運(yùn)行的查詢
  • 定期審查:建立定期性能分析機(jī)制

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

相關(guān)文章

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

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

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

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

    連接MySQL數(shù)據(jù)庫時難免會遇到1045錯誤,主要是因為用戶輸入的用戶名或密碼錯誤被拒絕訪問,如果不想重裝,需要找回密碼或者重置密碼,這篇文章主要給大家介紹了關(guān)于Navicat連接MySQL提示1045錯誤解決的方法,主要是重置MySQL密碼,需要的朋友可以參考下
    2023-04-04
  • SQL中distinct去重關(guān)鍵字使用和count統(tǒng)計組合使用方法

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

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

    MYSQL常用命令與實用技巧

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

    如何修改mysql的隔離級別

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

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

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

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

    本文主要介紹了MySql中的IFNULL、NULLIF和ISNULL用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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ù)場景、功能、底層實現(xiàn)原理以及使用措施,通過Java代碼示例展示了如何與這些日志進(jìn)行交互,進(jìn)一步深化了對MySQL日志系統(tǒng)的理解,理解并合理使用這些日志,可以有效地提升數(shù)據(jù)庫的性能和可靠性
    2024-10-10
  • 如何通過mysql-connector-java實現(xiàn)Java與MySQL的連接詳解

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

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

最新評論

于田县| 壶关县| 石楼县| 灵丘县| 资源县| 龙口市| 房产| 德钦县| 抚顺市| 开江县| 阜新市| 宁陵县| 山阳县| 如皋市| 彝良县| 阿鲁科尔沁旗| 德惠市| 临朐县| 临高县| 英吉沙县| 光泽县| 名山县| 金堂县| 吴旗县| 临潭县| 四会市| 霍山县| 宿州市| 东乡族自治县| 二连浩特市| 南昌市| 启东市| 迁安市| 微山县| 霍州市| 曲靖市| 洛阳市| 昌黎县| 蒙城县| 贵定县| 策勒县|