Home >Database >Mysql Tutorial > 关于Oracle表碎片整理

关于Oracle表碎片整理

WBOY
WBOYOriginal
2016-06-07 17:41:43968browse

数据库在日常使用过程中,不断的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

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

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

参考:

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

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn