首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

mysqlreport 工具實戰:MySQL 效能指標收集與參數調優指導

     編輯:MySQL 綜合教學

mysqlreport 工具實戰:MySQL 效能指標收集與參數調優指導

`mysqlreport` 是一個 Perl 腳本,能將 `SHOW GLOBAL STATUS`、`SHOW VARIABLES` 輸出轉化為易讀的效能報告,指導參數調優。適合定時任務收集高峰/低峰期基準線。

安裝部署

# 1. 安裝 Perl 依賴
yum install perl-DBI perl-DBD-MySQL -y
# 或 Ubuntu
apt-get install libdbi-perl libdbd-mysql-perl -y

# 2. 下載 mysqlreport
wget https://hackmysql.com/scripts/mysqlreport
chmod +x mysqlreport

# 3. 測試執行
./mysqlreport --user root --password 'pass' --host 127.0.0.1 --port 3306

報告關鍵區塊解讀

MySQL 5.6.25-log uptime 0 5:34:3  -- 運行時間 5小時34分

__ Key _________________________________________________________________
Buffer used 0 of 2.00G  %Used: 0.00          -- Key Buffer 使用率
Current 373.45M  %Usage: 18.24               -- 當前實際使用
Write hit 0.00%  Read hit 0.00%              -- 命中率(寫/讀)

__ Questions ___________________________________________________________
Total 757  0.0/s                             -- 總查詢數/每秒
Com_ 1.26k  0.1/s  %Total: 166.31            -- Com_* 命令計數
  -Unknown 805  0.0/s  106.34                -- 未分類命令
  DMS 294  0.0/s  38.84                      -- 資料操作(SELECT/INSERT/UPDATE/DELETE)
  COM_QUIT 9  0.0/s  1.19                    -- 連線斷開
  Slow 5 s 13  0.0/s  1.72                   -- 慢查詢數
  %DMS: 4.42                                 -- 慢查詢佔 DMS 比例

__ SELECT and Sort _____________________________________________________
Scan 337  0.0/s  %SELECT: 114.63             -- 全表掃描次數 (超過 100% 表示重複掃描)
Range 51  0.0/s  17.35                       -- 範圍查詢
Full join 0  0/s  0.00                       -- 無索引 Join
Sort scan 64  0.0/s                          -- 掃描排序
Sort range 1  0.0/s                          -- 範圍排序

__ Query Cache _________________________________________________________
Memory usage 16.81k of 1.00M  %Used: 1.64    -- 查詢快取使用率
Block Fragmnt 100.00%                        -- 碎片率
Hits 0  0/s  Inserts 1  0/s                  -- 命中/插入

__ Table Locks _________________________________________________________
Waited 0  0/s  %Total: 0.00                  -- 表鎖等待
Immediate 208  0.0/s                         -- 立即獲取

__ Tables ______________________________________________________________
Open 1 of 2000  %Cache: 0.05                 -- 開啟表數/快取上限
Opened 240  0.0/s                            -- 歷史開啟總數

__ Connections _________________________________________________________
Max used 4 of 1000  %Max: 0.40               -- 最大並發連線/上限
Total 15  0.0/s                              -- 總連線數

__ Created Temp ________________________________________________________
Disk table 20  0.0/s                         -- 磁碟臨時表 (應盡量為 0)
Table 472  0.0/s                             -- 總臨時表
Size: 16.0M                                  -- tmp_table_size/max_heap_table_size

__ Threads _____________________________________________________________
Running 1 of 2                               -- 運行中/總執行緒
Cached 2 of 18  %Hit: 73.33                  -- 執行緒快取命中率
Created 4  0.0/s                             -- 新建執行緒數
Slow 0  0/s                                  -- 慢啟動執行緒

__ InnoDB Buffer Pool __________________________________________________
Usage 127.98M of 127.98M  %Used: 100.00      -- Buffer Pool 使用率 100% (需擴容)
Read hit 97.36%                              -- 讀命中率 (目標 >99%)
Pages Free 0  %Total: 0.00                   -- 空閒頁為 0
Data 7.87k  96.12%  %Drty: 0.00              -- 髒頁比例
Reads 92.16M  4.6k/s  From file 2.43M 121.3/s 2.64%  -- 磁碟讀取比例

__ InnoDB Lock _________________________________________________________
Waits 0  0/s  Current 0                      -- 鎖等待
Time acquiring Total 0 ms  Avg 0 ms  Max 0 ms

核心指標調優對照表

指標健康閾值異常時調優方向
Key Read hit rate> 99%增大 key_buffer_size
InnoDB Buffer Pool Read hit> 99%增大 innodb_buffer_pool_size
InnoDB Buffer Pool %Used< 90%擴容或檢查大查詢沖刷
Table Locks Waited %< 1%優化長查詢、引擎遷移 InnoDB
Created_tmp_disk_tables接近 0增大 tmp_table_size/max_heap_table_size、優化 GROUP BY
Thread Cache Hit> 90%增大 thread_cache_size
Select Scan / Select< 10%補索引、避免全表掃描
Slow Queries0開啟慢查詢日誌、EXPLAIN 優化
InnoDB Log Waits0增大 innodb_log_buffer_size、innodb_log_file_size
Max Used Connections %< 80%增大 max_connections、檢查連線洩漏

自動化收集腳本

#!/bin/bash
# /usr/local/bin/mysqlreport_cron.sh
# 每小時執行: 0 * * * * /usr/local/bin/mysqlreport_cron.sh

OUT_DIR="/var/log/mysqlreport"
mkdir -p $OUT_DIR
DATE=$(date +%F_%H-%M)
./mysqlreport --user root --password 'xxx' --host 127.0.0.1 --port 3306 \
  > $OUT_DIR/report_$DATE.txt 2>&1

# 保留 30 天
find $OUT_DIR -name "report_*.txt" -mtime +30 -delete

進階替代工具

  • pt-query-digest (Percona Toolkit):慢查詢日誌深度分析
  • mysqltuner.pl:配置參數自動建議
  • Prometheus + mysqld_exporter + Grafana:生產級監控儀表板
  • MySQL Enterprise Monitor / PMM:官方/Percona 監控平台
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved