当索引的碎片过多时会影响执行查询的速度从而影响到我们的工作效率这时候采取的最有利的措施莫过于重建索引了本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程接下来我们就开始介绍这一过程
重建索引的步骤如下
确认基本信息
登入数据库找到专门存放index 的tablespace并且这个tablespace下所有index的owner都是tax将index专门存放在一个独立的tablespace 与数据表的tablespace分离是常用的数据库设计方法
查找哪些index需要重建
通过anlyze index validate structure命令可以分析单个指定的index并且将单个index 分析的结果存放到 index_stats试图下一般判断的依据是
height > pct_used < % del_lf_rows / lf_rows + > g )
google上下载了遍历所有index脚本
发现anlyze index validate structure只能填充单个index分析信息于是google了下从网上下了个Loop 脚本遍历索引空间下所有的索引名字并且可以把所有index的分析信息存放到自己建立的一个用户表中
anlyze index 锁定index
发现下载的脚本不好用应为anlyze index在分析索引前要争取独占锁锁住index很明显有些index正在被应用系统的使用所以运行anlyze失败这里吸取的教训是尽量晚上做这种事但是本人比较喜欢准时回家所以在语句中添加Exception Handler抛出anlyze index执行失败的那些index 名称使脚本正常运行完毕并且根据打印到前台的index name手动执行那些index分析
总结
虽然发现个index中有个符合上面的判断的依据但是发现索引都不大而那些拥有百万leaf的索引又没有符合上面的判断条件所以结论是无需index rebuild online 没有啥碎片
什么时候可以rebuild index呢?
rebuild index online对那些有大量DML操作的大索引是有益的可以每个月季度做一次针对较大索引的rebuild通常哪怕rebuild index online也会造成I/O争用所以有无online意义不大可以放到个晚上分批执行rebuild index锁定index不让用户用(没有用户等入的时候)并且加上paralle 关键字应为发现数据库服务器有个cpu processors
关于Oracle数据库检查索引碎片和重建索引的知识就介绍到这里希望能够对您有所帮助