如何定位一条慢 SQL?排查时重点看哪些指标?
定位慢 SQL 可以从三个入口入手:
- 实时慢 SQL:查询
GV$OB_SQL_AUDIT,按elapsed_time排序; - 全链路追踪:使用
trace_id查看 SQL 在 ODP、OBServer 各阶段的耗时; - 平台化分析:通过 OCP 查看慢 SQL 报表、TOP SQL 和计划变化。
排查时重点看:
-
queue_time高:说明请求在排队,可能是并发过高、资源不足或需要扩容; -
execute_time高:说明执行计划、数据量或索引设计有问题; - 是否有大量
EXCHANGE算子:说明跨机数据搬运较多; - 估算行数与实际行数是否偏差大:偏差大通常意味着统计信息不准;
- 是否出现全表扫描、回表过多或并行执行不合理。