达梦8索引管理

背景:生产中由于管理不规范,导致新建了很多索引,实际可能有用的索引没几个,怎么知道哪些是有用的索引,哪些是没用的索引,并对这些索引进行处理呢?

达梦有一个功能就是可以开启索引使用监控,监控索引有没有被使用到,根据这个我们可以对一些冗余索引进行处理

对索引进行监控的sql语法如下:

alter index 索引所属者.索引名 monitoring usage;

取消监控语法:

alter index 索引所属者.索引名 nomonitoring usage;

通过以下视图可以获知监控的索引使用情况

select  *
from  SYS."V$OBJECT_USAGE"

运维案例:

1、确定需要监控的索引【达梦只能监控用户创建的二级索引】

begin
for rs in(
select  'alter index '||owner||'.'||index_name||' monitoring usage;' as exec_sql,*
from  SYS.DBA_INDEXES
where INDEX_TYPE='NORMAL' and owner='SYSDBA') --监控sysdba下面的二级索引
loop
execute immediate rs.exec_sql;
end loop;
end;

2、监控系统运行一段时间后

3、查看监控的索引使用情况 used字段 =yes 表示使用过 =no 表示未被使用过

select * from V$OBJECT_USAGE;

4、备份未使用的索引定义到表op_index,删除未使用的索引

--创建备忘表
CREATE TABLE OP_INDEX(A DATETIME DEFAULT NOW(),B CLOB);

begin
for rs in(
select  'drop index '||sch_name||'.'||index_name||';' as exec_sql,
cast(' insert into op_index(b) select dbms_metadata.get_ddl(''INDEX'',''' as varchar(8000))||cast(INDEX_NAME as varchar(8000))||''','''||cast(sch_NAME as varchar(8000))||'''); commit;' as exec_index,
*
from   V$OBJECT_USAGE
where used='NO'
)
loop
execute immediate  rs.exec_INDEX ; --备份冗余索引
print rs.exec_index;
execute immediate rs.exec_sql; --删除冗余索引
end loop;
end;

5、取消监控的索引

begin
for rs in(
select  'alter index '||owner||'.'||index_name||' nomonitoring usage;' as exec_sql,*
from  SYS.DBA_INDEXES
where INDEX_TYPE='NORMAL' and owner='SYSDBA')
loop
execute immediate rs.exec_sql;
end loop;
end;

达梦技术社区:https://eco.dameng.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值