ProxySQL 检测 SQL 延迟的方法
ProxySQL 提供了多种方式来检测和监控 SQL 查询的延迟,这对于性能调优和故障排查非常重要。以下是主要的检测方法:
1. 通过 stats_mysql_query_digest 表监控
SELECT hostgroup, schemaname, username, digest, digest_text,
count_star, sum_time, sum_time/count_star AS avg_latency_ms
FROM stats_mysql_query_digest
ORDER BY sum_time DESC LIMIT 10;
这个查询会显示:
sum_time
: 总执行时间(微秒)count_star
: 执行次数avg_latency_ms
: 平均延迟(毫秒)
2. 使用 ProxySQL Admin Interface
-- 查看全局查询统计
SELECT * FROM stats_mysql_global.query_response_time;
-- 按百分位查看响应时间
SELECT * FROM stats_mysql_global.query_response_time_percentile;
3. MySQL Monitor模块
ProxySQL的Monitor模块可以定期检查后端服务器的响应时间:
-- 查看服务器状态和响应时间
SELECT hostname, port, status, connect_success_time_us/1000 AS connect_latency_ms
FROM mysql_servers;
4. Query Rules中的延迟控制
你可以在查询规则中设置最大执行时间:
INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup,
max_latency_ms)
VALUES (10,1,'^SELECT.*FOR UPDATE',1,100);
当查询超过100ms时会被标记为慢查询。
5. Slow Query日志
启用慢查询日志记录:
UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-log_slow';
SET mysql-log_slow = true;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
6. Performance Schema集成
如果后端MySQL启用了performance_schema,可以通过ProxySQL获取更详细的性能数据。
TIPS:
sum_time
的单位是微秒(μs),除以1000得到毫秒(ms)- ProxySQL默认每60秒重置一次统计信息,可通过调整
stats_mysql_query_digest_reset_interval
修改
内容由零声教学AI助手提供,问题来源于学员提问