操作步骤
--创建表
CREATE TABLE T(A INT);
--用 AUTO_STAT_OBJ=2 打开对 T 表的监控
SP_SET_PARA_VALUE(1,'AUTO_STAT_OBJ',2);
--对修改行数占总行数的比达到 STALE_PERCENT收集T表对象统计信息
DBMS_STATS.SET_TABLE_PREFS('SYSDBA','T','STALE_PERCENT',15);
--自 动 收 集 统 计 信 息 使 用SP_CREATE_AUTO_STAT_TRIGGER 设置触发器。
SP_CREATE_AUTO_STAT_TRIGGER(1, 1, 1, 1,'23:19', '2023/4/11',0,1);
--新增数据
INSERT INTO T SELECT LEVEL CONNECT BY LEVEL<=20;
--查询触发器是否更新成功
SELECT * FROM SYSSTATTABLEIDU;
--查看触发器状态
select name,valid from SYSOBJECTS where subtype$='TRIG';
参数和函数说明
AUTO_STAT_OBJ参数说明
参数名称 |
缺省值 |
属性 |
说明 |
AUTO_STAT_OBJ |
0 |
动态,系统级 |
是否监控增删改导致的修改行数和 TRUNCATE表操作。0:不监控;1:对所有表进行监控;2:只对用户执行过SET_TABLE_PREFS的表进行监控 |
STALE_PERCENT函数说明
DBMS_STATS.SET_TABLE_PREFS(SYSDBA','T','STALE_PERCENT',15);
语法如下:
PROCEDURE SET_TABLE_PREFS (
OWNNAME VARCHAR(128),
TABNAME VARCHAR(128),
PPNAME VARCHAR(128),
PVALUE VARCHAR(128)
);
参数详解
- OWNNAME模式名,不区分大小写。
- TABNAME表名,不区分大小写。
- PPNAME属性名,不区分大小写。可以取STALE_PERCENT、ESTIMATE_PERCENT、METHOD_OPT、DEGREE、GRANULARITY、CASCADE、NO_INVALIDATE和PREFERENCE_OVERRIDES_PARAMETER。
-STALE_PERCENT决定表的统计信息过时且需要重收集统计信息时表的行数百分比。有效取值范围是非负数,默认值是 10,即一张表有超过 10%的数据改变则可认为统计信息过时。取值范围[0,100],该值置为 0 时,则认为需要将该表的 STALE_PERCENT的属性值消除。
-PREFERENCE_OVERRIDES_PARAMETER决定是否用静态属性值覆盖参数的输入值。为 TRUE 时,忽略参数的输入值,使用对应的属性值。为 FALSE 时,使用参数的输入值。
- PVALUE属性名对应的属性值,不区分大小写。
SP_CREATE_AUTO_STAT_TRIGGER说明
定义:
SP_CREATE_AUTO_STAT_TRIGGER(
type int,
freq_interval int,
freq_sub_interval int,
freq_minute_interval int,
starttime varchar(128),
during_start_date varchar(128),
max_run_duration int,
enable int
)
功能说明:
INI 参数 AUTO_STAT_OBJ 开启时,启用自动收集统计信息功能。
参数说明:
- type:指定调度类型。可取值 1、2、3、4、5、6、7、8,默认为 1,不同取值意义
分别介绍如下:
1:按天的频率来执行;
2:按周的频率来执行;
3:在一个月的某一天执行;
4:在一个月的第一周第几天执行;
5:在一个月的第二周的第几天执行;
6:在一个月的第三周的第几天执行;
7:在一个月的第四周的第几天执行;
8:在一个月的最后一周的第几天执行。
- freq_interval:与 type 有关,表示不同调度类型下的发生频率,默认为 1。具体说明如下:
当 type=1 时,表示每几天执行,取值范围为 1~100;
当 type=2 时,表示每几个星期执行,取值范围为 1~100;
当 type=3 时,表示每几个月中的某一天执行,取值范围为 1~100;
当 type=4 时,表示每几个月的第一周执行,取值范围为 1~100;
当 type=5 时,表示每几个月的第二周执行,取值范围为 1~100;
当 type=6 时,表示每几个月的第三周执行,取值范围为 1~100;
当 type=7 时,表示每几个月的第四周执行,取值范围为 1~100;
当 type=8 时,表示每几个月的最后一周执行,取值范围为 1~100。
- freq_sub_interval:与 type 和 freq_interval 有关,表示不同 type 的执行频率,在 freq_interval 基础上,继续指定更为精准的频率,默认为 1。具体说明如下:
当 type=1 时,这个值无效,系统不做检查;
当 type=2 时,表示某一个星期的星期几执行,可以同时选中七天中的任意几天,取
值范围 1~127。具体可参考如下规则:因为每周有七天,所以 DM 数据库系统内部用七位二
进制来表示选中的日子,从最低位开始算起,依次表示周日、周一到周五、周六。选中周几,
就将该位置 1,否则置 0。例如,选中周二和周六,7 位二进制就是 1000100,转化成十进
制就是 68,所以 FREQ_SUB_INTERVAL 取值 68;
当 type=3 时,表示将在一个月的第几天执行,取值范围 1~31;
当 type 为 4、5、6、7 或 8 时,都表示将在某一周内第几天执行,取值范围 1~7,分别表示从周一到周日。
- freq_minute_interval:开始时间后,当天每隔几分钟再次执行,取值范围为1~1439,默认为 1439;
- starttime:开始时间,默认为 22:00;
- during_start_date:有效日期时间段的开始日期时间,只有当前时间大于该参数值时,该定时器才有效,默认为 1900/1/1;
- max_run_duration:收集统计信息触发器最大执行时间,单位秒,0 表示不限制,默认为 0;
- enable:定时器是否有效,1:有效,默认为 1。 2:删除触发器。
SYSSTATPREFS

