环境:OceanBase 4.2.x(或你的实际版本),集群模式(或单机),MySQL 模式。
有一张按天分区的业务表,约 300 个分区,总数据量 5 亿左右。现象是:白天业务低峰期查询正常,但到了数据写入高峰后,部分查询的执行计划突然从走索引变成全表扫描,响应时间从毫秒级涨到几秒。
初步排查:
- 用
EXPLAIN看执行计划,发现估算行数和实际行数偏差很大; -
DBA_TAB_STATISTICS里统计信息的上次收集时间是比较久以前; - 手动
ANALYZE TABLE后计划恢复正常,但过一段时间又复发。
想请教:
- OceanBase 的统计信息收集机制和 Oracle 差异较大,自动收集默认是开启的吗?触发条件是什么?
- 对于分区表,有没有办法只收集“有数据变化”的分区的统计信息?还是只能全表
ANALYZE? - 如果自动收集不及时,通常用什么方案补充?比如自定义定时任务 +
DBMS_STATS? - 有没有参数可以控制统计信息的“新鲜度”阈值,避免计划频繁抖动?
希望有 OB 运维经验的朋友指点一下,谢谢。