首页 > 编程学习 > 达梦数据库索引监控

达梦数据库索引监控

发布时间:2022/11/24 23:13:15

 一、索引监控 

DM提供索引监控的功能,用于监控数据库中相关索引是否使用过。包含自动监控和手动监控两种方式,默认为手动监控。该功能由参数MONITOR_INDEX_FLAG的配置值决定,默认为0,表示手动监控。

参数名

缺省值

属性

说明

MONITOR_INDEX_FLAG

0

动态,会话级

是否对索引进行监控。

0:关闭自动监控,可使用ALTER INDEX语句启用索引监控;

1:打开自动监控,对用户定义的二级索引进行监控;

2:禁止索引监控

1、手动监控索引 

索引监控(MONITORING USAGE)仅支持对用户创建的二级索引进行监控,不支持监控虚索引、系统索引、聚集索引、数组索引。

手动监控场景下,我们需要使用alter index…monitoring usage语句手动打开某个索引的监控。

①构造测试表和索引:

使用下列语句在TESTHR用户下创建测试表T_EMP,并创建两个索引:

create table testhr.t_emp as select * from dmhr.employee;create index testhr.ix_emp_empid on testhr.t_emp(employee_id);create index testhr.ix_emp_empname on testhr.t_emp(employee_name);

②打开索引的监控:

执行如下命令打开此两个索引的监控功能:​​​​​​​

alter index testhr.ix_emp_empid monitoring usage;alter index testhr.ix_emp_empname monitoring usage;

查看动态视图v$object_usage数据,可以看到表中显示两条监控的索引信息。其中,USED字段表示索引是否使用,NO表示还未使用。

select * from v$object_usage;

也可以使用如下sql查询某个用户/模式下所有普通索引信息,获取开启索引监控语句,根据实际需要执行语句开启索引监控。​​​​​​​

select 'alter index '||a.OWNER ||'.'|| a.INDEX_NAME|| ' monitoring usage;' as monitor_sql  from DBA_INDEXES a where a.OWNER = 'TESTHR'    and a.INDEX_TYPE = 'NORMAL';

③测试和查看索引的使用

使用索引字段employee_name查询T_EMP表数据:​​​​​​​

select employee_id, employee_name  from testhr.t_emp where employee_name like '马%';

再查看v$object_usage表数据,可以看到ix_emp_empname索引已使用:

使用索引字段employee_id查询T_EMP表数据,可以看到ix_emp_empid也显示为已使用。

④ 关闭索引的手动监控

索引监控完毕后建议关闭,执行如下命令可以关闭索引ix_emp_empname的监控。

alter index testhr.ix_emp_empname nomonitoring usage;

2、自动监控索引 

除手动监控索引外,DM也支持自动监控系统中的索引,将MONITOR_INDEX_FLAG参数设置为1,即开启索引的自动监控;设置为0则表示手动监控索引。

①开启索引自动监控

执行如下命令,开启索引的自动监控。​​​​​​​

alter system set 'MONITOR_INDEX_FLAG' = 1 BOTH;select para_name, para_value from v$dm_ini t where T.PARA_NAME = 'MONITOR_INDEX_FLAG';

② 测试索引的使用

如果是现网业务,打开索引的自动监控,业务运行一段时间后,v$object_usage中会显示所有已使用的索引信息。

我们这里模拟用户使用索引,查询DMHR模式下EMPLOYEE表数据,可以看到v$object_usage中将显示使用的索引:

③ 查询系统中未使用的索引信息

打开自动监控,v$object_usage中只记录了已使用的索引信息。使用如下sql可查询未使用的索引及索引字段信息,此时业务可根据实际情况删除不用的索引。​​​​​​​

select a.*  from dba_ind_columns awhere a.index_owner = 'DMHR'    and not exists     (select 1 from v$object_usage b      where a.index_name = b.index_name);

3、清除监控索引信息

索引监控一旦打开,v$object_usage中将保存所有监控的索引信息。如果我们想清除该表数据以重新监控索引,则可以使用SP_DYNAMIC_VIEW_DATA_CLEAR函数清除该动态视图数据。

call sp_dynamic_view_data_clear('V$OBJECT_USAGE');

 二、常见异常 

索引监控(MONITORING USAGE)仅支持对用户创建的二级索引进行监控,如下监控聚集索引将报错:

MONITOR_INDEX_FLAG参数非0时,不能执行alter index XX monitoring/nomonitoring命令,只能MONITOR_INDEX_FLAG为0时,才能启动索引的手动监控,否则报错。


本文链接:https://www.ngui.cc/zz/1443258.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000