Ubuntu下MariaDB性能監控的常用方法可分為內置命令、系統工具、第三方工具及日志分析四大類,以下是具體實現方式:
mysqladmin命令行工具
MariaDB自帶的輕量級命令行工具,可快速查看服務器核心狀態。常用命令:
mysqladmin -u root -p status
輸出包括服務器運行時間(Uptime)、當前活動線程數(Threads)、累計處理查詢數(Questions)、慢查詢數(Slow queries)、當前打開表數量(Open tables)等關鍵指標,幫助快速判斷服務器負載水平。
SHOW STATUS命令
通過MySQL客戶端執行,獲取詳細的性能指標(如緩沖池命中率、鎖等待時間、連接數等)。示例:
mysql -u root -p -e "SHOW STATUS;"
可結合條件過濾(如SHOW STATUS LIKE 'Innodb_buffer_pool_read%'
)關注特定指標,用于深入分析性能瓶頸。
SHOW PROCESSLIST命令
查看當前所有連接的詳細信息(包括連接ID、用戶、執行狀態、運行時間、SQL語句),幫助識別長時間運行的查詢或鎖等待問題:
mysql -u root -p -e "SHOW FULL PROCESSLIST;" # FULL顯示完整SQL語句
是排查“慢查詢”或“連接泄漏”的常用工具。
EXPLAIN命令
分析SQL查詢的執行計劃,判斷是否使用了索引、是否存在全表掃描等問題。示例:
mysql -u root -p -e "EXPLAIN SELECT * FROM users WHERE id = 1;"
關注type
(訪問類型,如const
優于ALL
)、key
(使用的索引)、rows
(掃描行數)等字段,優化查詢性能。
top/htop
實時顯示系統進程的資源占用情況,通過過濾mysql
用戶進程,查看MariaDB的CPU、內存使用率:
top -Hu mysql # 顯示mysql用戶的所有線程
htop -p $(pgrep -f mariadb) # 交互式查看,更直觀
高CPU占用可能提示查詢未優化,高內存占用可能需調整緩沖池大小。
iostat
監控系統磁盤I/O負載(需安裝sysstat
包),通過await
(平均I/O等待時間)、%util
(磁盤利用率)判斷磁盤是否成為瓶頸:
iostat -x 1 # 每秒刷新一次,-x顯示詳細指標
若%util
接近100%,說明磁盤I/O繁忙,可能需要優化查詢或升級存儲(如使用SSD)。
vmstat
報告系統級內存、CPU、I/O活動(需安裝sysstat
包),通過r
(運行隊列長度)、free
(空閑內存)、si/so
(交換分區讀寫)判斷系統負載:
vmstat 1 # 每秒刷新一次
若r
值持續高于CPU核心數,說明CPU資源緊張;若si/so
值不為0,說明內存不足,系統正在使用交換分區。
ss/netstat
查看MariaDB的網絡連接狀態(如監聽端口、當前連接數),幫助判斷網絡是否成為瓶頸:
ss -tulnp | grep mariadb # 推薦,更現代
netstat -tulnp | grep mariadb # 傳統命令
關注ESTABLISHED
連接數(是否超過max_connections
設置)和TIME_WAIT
狀態(是否過多)。
Percona Monitoring and Management (PMM)
專為MariaDB/MySQL設計的開源監控解決方案,提供性能指標收集(如查詢延遲、緩沖池命中率)、慢查詢分析、告警等功能。部署后可通過Web界面直觀查看數據庫健康狀態,適合企業級環境。
Prometheus + Grafana
mysqld_exporter
,將MariaDB指標轉換為Prometheus可識別的格式);Zabbix
企業級開源監控系統,支持MariaDB的性能監控(如連接數、CPU使用率、磁盤空間)、告警(郵件、短信)和自動化運維??赏ㄟ^模板快速部署,適合已有Zabbix基礎設施的環境。
Netdata
開源實時性能監控工具,開箱即用,無需復雜配置即可監控MariaDB的CPU、內存、磁盤I/O、網絡流量等指標,支持Web界面查看和告警,適合小型環境或快速部署。
開啟慢查詢日志,記錄執行時間超過閾值的查詢,用于后續分析和優化:
# 登錄MariaDB后執行
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; # 設置慢查詢閾值為1秒
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
或修改配置文件/etc/mysql/mariadb.conf.d/50-server.cnf
(永久生效):
[mysqld]
slow_query_log = ON
long_query_time = 1
slow_query_log_file = /var/log/mysql/slow.log
通過mysqldumpslow
工具分析日志(如mysqldumpslow -s t /var/log/mysql/slow.log
),找出最耗時的查詢并進行優化(如添加索引、重寫SQL)。