注册
自动更新统计信息
专栏/Database Thinking/ 文章详情 /

自动更新统计信息

胡li 2024/04/08 2234 6 0
摘要 更新统计信息可查看《DM8 系统管理员手册》 22.5统计信息章节

操作步骤

--创建表

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

image.png
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服