首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 系統效能狀態採集腳本:SHOW GLOBAL STATUS/Variables/InnoDB/Processlist 定時入庫

     編輯:MySQL 資料庫相關知識

    腳本用途

    每 5 秒採集一次 MySQL 全域狀態、InnoDB 狀態、進程列表、系統負載,寫入時間序列檔案,事後用 pt-query-digest、Excel、Grafana 分析效能趨勢。

    KSH 腳本完整版

    #!/bin/ksh
    INTERVAL=5
    PREFIX=${INTERVAL}-sec-status
    touch /tmp/running
    RUNFILE=/tmp/running
    
    # 固定變數快照
    mysql -e 'SHOW GLOBAL VARIABLES' > mysql-variables
    
    while test -e $RUNFILE; do
        file=$(date +%F_%H)
        sleep=$(date +%s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}")
        sleep $sleep
        ts="$(date +\"TS %s.%N %F %T\")"
        loadavg="$(uptime)"
    
        echo "$ts $loadavg" >> $PREFIX-${file}-status
        mysql -e 'SHOW GLOBAL STATUS' >> $PREFIX-${file}-status &
    
        echo "$ts $loadavg" >> $PREFIX-${file}-innodbstatus
        mysql -e 'SHOW ENGINE INNODB STATUS\G' >> $PREFIX-${file}-innodbstatus &
    
        echo "$ts $loadavg" >> $PREFIX-${file}-processlist
        mysql -e 'SHOW FULL PROCESSLIST\G' >> $PREFIX-${file}-processlist &
    
        echo $ts
    done
    
    echo "Exiting because $RUNFILE does not exist."

    關鍵指標解讀

    來源關鍵指標健康閾值/含義
    GLOBAL STATUSThreads_connected當前連接數,接近 max_connections 報警
    Threads_running活躍查詢數,持續高位 → 慢查詢/鎖爭用
    Questions / QueriesQPS 基線
    Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests命中率 = 1 - reads/requests,< 99% 需擴充 buffer pool
    Innodb_row_lock_waits / Innodb_row_lock_time_avg行鎖等待次數/平均時間,飆高 → 熱點更新/索引缺失
    INNODB STATUSSEMAPHORES / TRANSACTIONS / FILE I/O信號量等待、活躍事務、檔案 I/O 待完成,定性分析卡點
    PROCESSLISTTime, State, Info長時間 Sleep、Locked、Sending data、Copying to tmp table
    OSloadavg, vmstat, iostatCPU、記憶體、磁碟瓶頸交叉驗證

    進階:自動化分析

    # 產生報表
    pt-query-digest 5-sec-status-2024-01-15-status --type slowlog --limit 20
    
    # 導入 InfluxDB/Grafana 持續監控
    # Telegraf + MySQL input plugin 替代手工腳本
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved