关于Oracle表碎片整理

原创
2016-06-07 17:41:43 708浏览

数据库在日常使用过程中,不断的insert,delete,update操作,导致表和索引出现碎片是在所难免的事情,碎片多了,sql的执行效率自然就差了,道理很简单,高水位

数据库在日常使用过程中,不断的insert,delete,update操作,导致表和索引出现碎片是在所难免的事情,碎片多了,sql的执行效率自然就差了,香港虚拟主机,道理很简单,高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink space碎片整理功能。对于索引,可以采取rebuild online的方式进行碎片整理,一般来说,经常进行DML操作的对象DBA要定期进行维护,同时注意要及时更新统计信息!

一:准备测试数据,免备案空间,香港虚拟主机,使用HR用户,创建T1表,插入约30W的数据,并根据object_id创建普通索引,表占存储空间34M左右,索引占6M左右的存储空间

二:估算表在高水位线下还有多少空间可用,这个值应当越低越好,表使用率越接近高水位线,全表扫描所做的无用功也就越少!

DBMS_STATS包无法获取EMPTY_BLOCKS统计信息,所以需要用analyze命令再收集一次统计信息

三: 查看执行计划,全表扫描大概需要消耗CPU 1175

四:删除大部分数据,收集统计信息,全表扫描依然需要消耗CPU 1168

五:估算表在高水位线下还有多少空间是无数据的,但在全表扫描时又需要做无用功的数据

六:对表进行碎片整理,重新收集统计信息

参考:

关于如何确定哪些表需要进行碎片整理,可以使用附件中的脚本去查询,具体请参考:

本文出自 “斩月” 博客,谢绝转载!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。