遇到一个现象:某张表数据量变化比较大,执行计划选了个明显不合适的索引,手动 ANALYZE TABLE 后就正常了。
想请教:
- OB 的自动统计信息收集是默认开启的吗?触发条件是什么?
-
enable_sql_plan_baseline或 plan cache 会不会导致旧计划一直复用? - 生产上怎么监控“统计信息过期”这类问题?
有相关经验的朋友指点下。
遇到一个现象:某张表数据量变化比较大,执行计划选了个明显不合适的索引,手动 ANALYZE TABLE 后就正常了。
想请教:
enable_sql_plan_baseline 或 plan cache 会不会导致旧计划一直复用?有相关经验的朋友指点下。
根据文档中的信息,OceanBase 数据库默认是开启自动统计信息收集的。触发自动统计信息收集的主要依据是表数据的变化情况。
SQL_PLAN_BASELINE 或者使用了 plan cache 功能,在某些情况下确实可能会使得优化器继续选择基于旧统计信息生成的执行计划,即使当前统计信息已经更新。这通常是因为系统认为历史上的执行计划表现更好,除非手动刷新计划基线或清空计划缓存。ALL_TAB_MODIFICATIONS 或 DBA_TAB_MODIFICATIONS 视图来获取各表的 DML 操作次数;而无论是 Oracle 还是 MySQL 模式,都可以利用 OCEANBASE.DBA_SCHEDULER_JOBS 和 OCEANBASE.DBA_SCHEDULER_WINDOWS(针对 MySQL 模式)等视图了解维护窗口任务(包括自动统计信息收集任务)的执行详情如上次运行时间、下次预定时间以及失败计数等。希望以上信息能帮助您理解和解决遇到的问题!如果有更具体的需求或问题,请随时提问。
检索到的文档如下: