自动收集示例:
设置AUTO_STAT_OBJ=1,打开监控:
执行系统过程SP_CREATE_AUTO_STAT_TRIGGER,进行自动收集。系统过程参数含义:
SP_CREATE_AUTO_STAT_TRIGGER(
type int,--类型,1-8,分别为天、周、月、月的第一、二、三、四周、月的最后一周
freq_interval int,--调度频率,和type对应
freq_sub_interval int,--执行频率
freq_minute_interval int,--开始时间后当天每几分钟执行一次,1-1439,默认1439
starttime varchar(128),--开始时间,默认22:00
during_start_date varchar(128),--开始时间,默认1900/1/1
max_run_duration int,--最大执行时间(秒),默认0(不限制)
enable int--0不启用,1启用,2删除
)
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,分别表示从周一到周日
对表进行dml操作:
查看统计信息收集情况:
创建用户表和过程,保存自动收集过程的相关信息:
create table AUTO_STAT_INFO(
task_id INT,
total_stat INT,
table_id INT,
sch_name varchar(24),
table_name varchar(24),
curr_gath_tab_id INT,
curr_gath_sch_name varchar(24),
curr_gath_tab_name varchar(24),
success_stat INT,
fail_stat INT,
task_start_time DATETIME,
task_end_time DATETIME,
gather_tbl_start_time DATETIME,
gather_tbl_end_time DATETIME
);
CREATE OR REPLACE PROCEDURE SYSDBA.GET_AUTO_STAT_INFO_FUNC
(task_id INT,total_stat INT,table_id INT, sch_name varchar(24), table_name varchar(24),curr_gath_tab_id INT, curr_gath_sch_name varchar(24), curr_gath_tab_name varchar(24),success_stat INT,fail_stat INT,task_start_time DATETIME, task_end_time DATETIME,gather_tbl_start_time DATETIME,gather_tbl_end_time DATETIME) as
BEGIN
//将SYSDBA.GET_AUTO_STAT_INFO_FUNC过程的信息插入到用户表AUTO_STAT_INFO 中
INSERT INTO AUTO_STAT_INFO VALUES(task_id,total_stat,table_id, sch_name,table_name,curr_gath_tab_id, curr_gath_sch_name, curr_gath_tab_name,success_stat ,fail_stat,task_start_time,task_end_time,gather_tbl_start_time,gather_tbl_end_time);
commit;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
/
这个存储过程,使得SP_CREATE_AUTO_STAT_TRIGGER触发一次自动收集时,在AUTO_STAT_INFO表中插入记录了收集时间、收集表个数及id等信息。这张表的数据如图:
手动收集示例:
手动收集统计信息,使用DBMS_STATS包中的GATHER_TABLE_STATS 方法。
//调用系统过程创建系统包,并设置启用打印消息:
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_STATS');
SET SERVEROUT ON; //图形化界面可忽略,disql需执行此命令
然后执行语句:
BEGIN
DECLARE
OBJTAB DBMS_STATS.OBJECTTAB;
OBJ_FILTER_LIST DBMS_STATS.OBJECTTAB;
BEGIN
OBJ_FILTER_LIST(0).OWNNAME = 'DMHR';//指定模式
OBJ_FILTER_LIST(0).OBJTYPE = 'TABLE';//指定对象类型
OBJ_FILTER_LIST(0).OBJNAME = 'DEPARTMENT';//制定表名
DBMS_STATS.GATHER_SCHEMA_STATS(
'DMHR', //与上面保持一致
1.0,
FALSE,
'FOR ALL COLUMNS SIZE AUTO',
1,
'AUTO',
TRUE,
NULL,
NULL,
'GATHER',
OBJTAB,
NULL,
TRUE,
TRUE,
OBJ_FILTER_LIST
);
PRINT OBJTAB.COUNT;
FOR I IN 0..OBJTAB.COUNT-1 LOOP
PRINT OBJTAB(I).OWNNAME;
PRINT OBJTAB(I).OBJTYPE;
PRINT OBJTAB(I).OBJNAME;
PRINT OBJTAB(I).PARTNAME;
PRINT OBJTAB(I).SUBPARTNAME;
PRINT '-------- ';
END LOOP;
END;
END;
/
打印的统计信息结果:
达梦在线服务平台:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台