阿里巴巴数据库操作手册 12-删除索引

V1.0

 

Revision

Author/Modifier Comments

No.

Date

1.0 2012.02 黄欢欢 初稿
       

一、 目的

明确删除索引操作的风险及标准流程,最大限度避免删除索引操作带来的故障。

二、 适用范围

l 由于新建了索引,冗余的索引可以删除的情况。

l 存在的索引没有在被使用或者并没有加快查询,浪费空间和降低DML效率的情况。

l 由于SQL走错执行计划,通过删除索引来调整执行计划的情况。

l 在IMP导入或者大数据量修订的时候,不允许先删除索引之后再重建的方式, 而是先设置索引不可用。

l 由于删除表所引起的索引删除不在此范围内。

l 无特殊说明,本手册只是针对常规B-tree索引,以及我们常用到的Local Partitioned Indexes和函数索引, 不涉及Bitmap类型和domain类型的索引及其他复杂索引。

l 在11G中, 如果不是为了节约空间的考虑, 可以选择将index设置成不可见,索引正常更新,但会被CBO忽略,观察三天没有问题的话再删除。

三、 风险评估

l 登陆错了schema,没有经过检查就删除,导致该schema下的同名的索引被删除。

l 试图删除没有在使用的索引前, 没有monitor一段时间, 结果发现该索引还是有在被使用的, 导致改sql走错执行计划。

l 试图删除关联强制唯一或主键的索引或者尝试删除local index的一个索引分区会报错。

l 如果索引正在被使用,尝试删除索引的话因为申请不到类型为6的TM锁,直接抛出resource busy的错误

l 在IMP等导入数据的时候删除索引, 因索引缺失引发的其他sql走错执行计划的风险。

l 索引删除后shared_pool中的与这个表相关的sql都会被aged out,必须重新分析,这个带来了潜在的风险。

l 尝试删除系统维护的Lob字段将会抛错, 只能对对应的lob字段进行操作

四、 操作流程

4.1准备工作

a) 首先要明确因何种原因删除索引,根据原因确定删除方案和时间,如果不是需要紧急处理的情况,删除索引应该安排在晚上十点后完成。

b) 准备删除索引脚本或命令,如果是删除不会被用到的索引,需要确保没有sql引用该索引, 我们通常的方式是:

1) monitoring index usage 至少一个星期, 以索引所在的schema然后查看V$OBJECT_USAGE

2) 通过查看dba_hist_sql_plan,v$segment_statistics ,idb的全文索引, AWR,报告等方式确认。

c) 删除索引前必须准备好回滚方案, copy出索引的完整定义放置变更单中, 以便能及时回滚, 并且备份索引的统计信息。

d) 删除索引操作属于一般变更或重大变更,在做之前必须在ITIL中提交相应的变更申请。

4. 2执行过程

e) 用应用账户登录数据库,SHOW USER检查是否连接到正确的schema。严禁使用sys、system等用户建表。

f) 执行删除索引脚本或命令。对于同步库, 则需根据删除原因判断是否在同步库也删除索引。

g) 查看过程若无报错,退出当前登录。若有报错,找出报错的地方,修改确认再执行,直至执行通过,最后退出当前登录。

4.1.3验证方案

h) 常规检查:@dbcheck  @ind

i) 整体的load

j) 查看关注的sql的执行计划,判断所关注的sql执行计划是否正确。

五、 核心对象风险

1) 由于核心对象通常比较大, sql关联比较复杂,访问比较频繁, 删除index的变更风险比较大,所以务必要在业务低峰期进行。

2) 对于核心对象的索引删除, 事先需要跟应用沟通一下,所制定的方案需要在同版本的测试库上做完整的测试,确认下的方案需要经过cab会议讨论,经过主管同意。

3) 在核心对象上删除索引,需要关注影响的范围是单个sql还是会影响其他sql,应该事前在SQL全文索引中,检查并整理出可能影响到的sql,如果删除后导致其他sql执行计划发生了意想不到的变化, 需要考虑后续方案或者回退方案。

六、 回退方案

删除索引的过程存在一定风险,重建后也可能会导致单条或多条sql改变执行计划,直接或间接影响到数据库和应用, 必须准备好回退方案。

1)因事先保存了索引创建的完整定义,回滚的第一选择是创建一个和原先一样的索引, 并且回滚统计信息。具体创建的方法参见《新建索引操作手册》

2)若按照原来的定义创建后问题还是没有解决,则无法回滚到原先的索引, 对此引发的突发问题, 需要根据遇到的实际场景, 进行有效地决策。

七、 历史故障及教训

暂无

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓