序号 | 可能原因 |
1 | SQL 语句未使用索引或未使用较佳的索引,导致全表扫描或低效执行计划。 |
2 | QPS 压力超过当前实例规格的承载上限,大量请求排队堆积。 |
3 | 并行度设置不当,并行查询资源争抢导致单条 SQL 执行时间过长。 |
4 | 数据量增长后统计信息过期,优化器选择了次优执行计划。 |
可能原因 | 解决思路 |
SQL 未使用索引或执行计划不佳 | 通过 DBbrain 智能诊断分析慢 SQL,添加合适的索引,优化 SQL 语句。 |
QPS 超出实例承载能力 | 优化业务请求模式,降低无效查询;必要时升级实例规格。 |
并行度设置不当 | 通过控制台调整 max_parallel_degree 参数,合理控制并行查询并发度。 |
统计信息过期 | 对相关表执行 ANALYZE TABLE 更新统计信息,使优化器选择更优执行计划。 |
监控指标 | 说明 | 关注点 |
慢查询数 | 每秒慢查询数量 | 是否持续升高或突增 |
CPU 利用率 | 实例 CPU 使用率 | 是否与慢查询数同步飙升 |
SQL 平均执行时间 | SQL 平均耗时 | 是否明显变长 |
P95 SQL 执行时间 | 95% 分位执行时间 | 长尾查询耗时情况 |
P99 SQL 执行时间 | 99% 分位执行时间 | 极端慢查询耗时情况 |
总 QPS | 每秒 SQL 总数 | 是否超出实例承载能力 |
SQL 失败数 | 每秒失败 SQL 数 | 是否出现大量失败 |
SELECTSCHEMA_NAME,DIGEST_TEXT,COUNT_STAR AS EXEC_COUNT,ROUND(AVG_TIMER_WAIT / 1000000000, 2) AS AVG_MS,ROUND(MAX_TIMER_WAIT / 1000000000, 2) AS MAX_MS,SUM_ROWS_EXAMINED AS TOTAL_ROWS_EXAMINED,SUM_ROWS_SENT AS TOTAL_ROWS_SENTFROM performance_schema.events_statements_summary_by_digestWHERE SCHEMA_NAME IS NOT NULLORDER BY AVG_TIMER_WAIT DESCLIMIT 20;
AVG_MS:平均执行时间(毫秒),数值越大说明 SQL 越慢。TOTAL_ROWS_EXAMINED:总扫描行数,若扫描行数远大于返回行数,说明存在低效扫描。DIGEST_TEXT:规范化后的 SQL 文本,用于定位具体 SQL。EXPLAIN 查看执行计划。EXPLAIN SELECT ...;
type 列为 ALL 表示全表扫描,需要添加索引。rows 列值过大说明扫描行数过多。key 列为 NULL 表示未使用索引。WHERE、JOIN、ORDER BY、GROUP BY 涉及的列添加合适的索引。SELECT *,只查询需要的列。WHERE 条件中对索引列使用函数或运算。OR 条件中混合使用索引列和非索引列。ANALYZE TABLE table_name;
max_parallel_degree。max_parallel_degree 以提升并行度。long_query_time 可以捕获更多慢查询,便于全面排查问题,但可能增加日志量。long_query_time 可以只关注极慢查询,减少干扰。max_execution_time 参数。例如设置为 5000,表示 SELECT 语句执行超过5秒将自动终止。详细操作请参见 设置实例参数。max_execution_time 仅对 SELECT 语句生效。设置过小的超时时间可能导致正常的长查询被意外终止,请根据业务实际最长查询时间合理设置。ANALYZE TABLE,确保优化器选择最优执行计划。EXPLAIN 验证执行计划,确保使用索引且扫描行数合理。文档反馈