谁都能看懂之“Oracle碎片整理”

某个城市发展的不错,国土资源局给规划了很大一块地,作为经济开发区,假设这块地是下面这样的:
谁都能看懂之“Oracle碎片整理”_第1张图片
土地规划出来后,一招商,万达城来了,各种房地产开发商来了,各种大小工厂,学校也来了,如是一划分,可能是这样的:
谁都能看懂之“Oracle碎片整理”_第2张图片
刚开始的时候空间利用率比较高,地块排查(select查询)和分配(insert)都比较快,但是随着地块被不断划分出去,再要从中划分出合适的地块就会越来越费劲,假设现在分配到下面这种状态:
谁都能看懂之“Oracle碎片整理”_第3张图片
这时候来了一个大型国企,需要建工厂,建写字楼等等,总之他要一块超大的地块,这时候虽然原本规划的土地上还有很多小的空闲地块,但是他用不上,必须要重新规划一块地块给他用,如下:
谁都能看懂之“Oracle碎片整理”_第4张图片
新的地块来满足市场需求,于是经开区整体的土地规划的越来越多了(表空间越来越大),在已经规划出去的(被formatted的数据块)土地上,也有一些企业搬走了(delete操作),但是在国土局的规划图上还是占用状态(HWM高水位线),每次对土地进行清查(表扫描scan),这部分土地也是相当消耗人力。终于在经过多年的发展以后,经济开发区变成了老城区,这里存在着大量无法使用的小片地块,国土局发现老城区越来越不好规划和管理了,于是决定老城区整体拆迁,整体改造(碎片整理)。

之前不理解,国家为什么把军车牌照从中文全部换成英文,仔细想想,这不就是对数据表进行Rename操作并且重建表么,当然这里不仅有碎片整理,还有历史垃圾数据清理:-),房产证换成不动产证是不是也有这个思路呢?

不能扯太远,下面说一点专业性的内容吧。

在Oracle数据库中,表是用一个高水位线(High-warter mark, HWM)来记录使用数据块的情况,每次Insert数据,都会推高HWM,HWM的增长幅度为一次5个数据块。当发生delete操作时,虽然删除了数据,但是HWM是不会降低的,select操作不管实际数据块的大小,依然会扫描这个高水位HWM以下的所有数据块。对于大型的OLTP系统,频繁delete操作会产生的大量的存储碎片,严重影响整体性能。这样的业务系统,即时做好碎片程度分析,并做好碎片整理,能起到意想不到的优化效果。

Tip:采用TRUNCATE操作会重置HWM,在清空一张表时,请记得用TRUNCATE TABLE ××,而不是DELETE FROM TABLE××。


原文:公众号【咨同科技】 谁都能看懂之“Oracle碎片整理”

你可能感兴趣的:(Oracle,lock,oracle)