首批通过分布式安全可靠测评,为关键业务系统打造
自动收集统计信息
更新时间:2023-07-18 17:25:59
在 OceanBase 数据库 Oracle 模式下,自动统计信息是指通过设置定时任务,定期的根据表的数据变化去去自动收集统计信息。
说明
OceanBase 数据库 MySQL 模式下暂不支持此方式,只支持
ANALYZE语句收集方式。
由于 OceanBase 数据库是一个分布式的数据库,因此没法直接在 Server 内部创建租户的同时自动去创建收集任务,因此需要显式地在创建好的租户或者从低版本的 Server 升级上来的租户中利用 DBMS_JOB 去创建一个定时任务,示例如下:
##设置一个从现在开始,每隔一天执行自动收集统计信息的任务
DECLARE
jid BINARY_INTEGER;
BEGIN
DBMS_JOB.SUBMIT(jid, 'dbms_stats.gather_database_stats_job_proc();', trunc(sysdate) , 'trunc(sysdate) + 1');
COMMIT;
END;
目前 OceanBase 数据库优化器的自动统计信息收集策略如下:
系统表和非分区用户表的自动收集策略:
如果表没有
GLOBAL级别的统计信息,自动收集统计信息。如果表有
GLOBAL级别的统计信息,但是统计信息已经过期,则自动收集统计信息。
否则,不会自动收集统计信息。
分区用户表的自动收集策略:
如果表没有任何统计信息,自动收集所有的统计信息。
如果表有分区级别的统计信息,但是没有
GLOBAL级别统计信息,则采用增量的方式自动收集统计信息。如果表有
GLOBAL级别统计信息,但是已经过期,则自动收集所有的统计信息。如果表有
GLOBAL级别统计信息,但是没有全部过期,仅仅只是部分分区的统计信息过期,则自动收集统计信息过期的分区统计信息,同时采用增量的方式推导GLOBAL级别统计信息。