达梦数据库统计信息自动、手动收集及示例

自动收集示例:

设置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;
/

打印的统计信息结果:

达梦在线服务平台:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值