提问背景
OceanBase的优化器基于代价选择执行计划,索引统计信息(如直方图)的准确性直接影响计划质量。当数据分布倾斜或查询条件复杂时,可能选错索引。此外,执行计划缓存虽然能减少解析开销,但若缓存计划不适合后续参数,反而导致性能下降。用户急需了解如何监控和干预计划生成。
具体问题
- OceanBase如何收集统计信息?是否支持自动更新统计信息?对于分区表,统计信息是全局维护还是分区级维护?
- 当发现某条SQL使用了错误的索引,是否有类似Oracle的SQL Profile或Outlines功能可以稳定计划?
- 执行计划缓存的失效策略是什么?当表结构或统计信息变更时,缓存计划会自动失效吗?如何手动清理特定SQL的缓存计划?
- 是否存在类似MySQL的optimizer_switch开关,可以调整优化器行为(如索引合并、MRR)?
问题价值
SQL性能调优是DBA日常工作重点,该问题直接触及优化器内核机制,帮助用户提升诊断和优化能力,尤其适合复杂查询场景。