ProxySQL 性能监控脚本推荐
以下为基于不同场景的实用监控脚本与工具配置方案,覆盖内置统计查询、第三方集成工具及自动化监控框架:
一、内置 SQL 监控脚本
高频查询分析
sql
-- 统计 TOP 10 慢查询(来源:stats_mysql_query_digest)
SELECT digest, digest_text, count_star, sum_time, sum_rows_affected
FROM stats_mysql_query_digest
ORDER BY sum_time DESC
LIMIT 10;
用途:识别耗时最高的 SQL,优化索引或缓存策略。
连接池状态监控
sql
-- 查看各节点连接池利用率
SELECT hostgroup_id, hostname, status, ConnUsed, ConnFree, ConnOK
FROM stats_mysql_connection_pool;
关键指标:ConnUsed(活跃连接数)、ConnFree(空闲连接数)。
全局性能概览
sql
-- 全局统计(QPS、总连接数、错误率)
SELECT Variable_name, Variable_value
FROM stats_mysql_global
WHERE Variable_name IN ('Questions', 'Connections', 'Client_Connections_aborted');
告警阈值:Client_Connections_aborted 突增可能预示网络或负载异常。
二、第三方工具集成脚本
Prometheus + Grafana 监控模板
部署 proxysql_exporter:
bash
./proxysql_exporter \
--collect.mysql_connection_pool \
--collect.mysql_status \
--web.listen-address=:9104
功能:采集 ProxySQL 连接池、QPS、延迟等指标。
Grafana 仪表盘:
使用模板 ID 7362 或自定义面板,展示核心指标(如请求吞吐量、缓存命中率)。
Percona Monitoring and Management (PMM) 集成
配置 PMM 客户端:
bash
pmm-admin add proxysql --service-name=proxysql-cluster1
优势:联动 MySQL 节点监控,分析全链路性能瓶颈。
Zabbix 自定义监控项
脚本示例(Python):
python
import proxysql_tools
stats = proxysql_tools.get_connection_pool_usage()
print(f"ConnUsed: {stats['ConnUsed']}")
告警规则:设置连接池使用率 >80% 时触发告警。
三、自动化监控框架
慢查询自动捕获脚本
bash
定期导出慢查询日志并分析
mysqldumpslow -s t /var/lib/proxysql/slow.log > /tmp/slow_queries_report.txt
调度:通过 Cron 每日执行,生成报告供 DBA 优化。
动态规则调整脚本
bash
根据 QPS 自动调整读写分离权重
if [ $(curl -s prometheus:9090/api/v1/query?query=proxysql_questions_total | jq '.data.result[0].value[1]') -gt 10000 ]; then
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e "UPDATE mysql_servers SET weight=200 WHERE hostgroup_id=20;"
fi
用途:应对流量高峰,动态分配读写节点负载。
方案对比与适用场景
类型 工具/脚本 核心优势 适用场景
内置 SQL 查询 stats_mysql_query_digest 实时性强,无需额外部署 日常巡检与快速问题定位
第三方集成监控 Prometheus + Grafana 可视化全面,支持历史数据分析 长期性能趋势监控
自动化运维脚本 动态规则调整脚本 灵活应对流量波动,减少人工干预 高弹性业务场景
实践建议
分层部署:
使用内置 SQL 脚本实时监控关键指标,结合 Prometheus 实现历史数据存档。
告警联动:
在 Zabbix 或 Grafana 中配置阈值告警(如连接池耗尽、主从延迟超限)。
性能基线:
通过定期运行 stats_mysql_global 记录性能基线,快速识别异常波动。
浙公网安备 33010602011771号