Fragmentation3-表碎片

碎片(Fragmentation)--解析
Fragmentation write by Jonathan Lewis Translated By me
Fragmentation3:
这是第三部分,将涵盖表碎片:
1,介绍
2,磁盘和表空间碎片
3,表碎片
4,索引碎片


3.表碎片"fragmentation"
在第一部分我们讨论了一种表的碎片(通常不是有影响的)-一张表被划分成很多的区(extents).一个很有意思的见解-ASSM(automatic segment space management)
引入了另一种表碎片(通常没有影响).
当一个进程要插入新数据,它检查一个对象的空闲空间的bitmaps发现没有足够的空闲空间,它将腾出足够的空间通过格式化当前extent中的16个blocks(如果有必要,
分配新的extent).这个16个blocks可能在这个extent中的任何位置(受限与这个事实:the starting point within the extent has to be based on multiples of 16
(不太好表达)),chunk的位置,比如初始选择去用的块,是被进程的pid所规定。这意味着你可以在一个表空间创建一个表使用1MB的统一分配的extent,你发现你插入
的第一行格式化了这个extent中的最近的16个块,插入的这行将进入这个extent中最近的block。这个并不是真正的影响非常大,因为(a)大多数的I/O访问都是通过
block而不是tablescan,所以在extent中的为之并不真正影响什么。(b)这种比较混乱的情况一般仅仅被此表中的最后一个extent所限制。(c)如果你是正在做tablescans,
oracle有一种机制依赖于使用"LHWM"(LOW HIGH WATER MARK)和HHWN(HIGH HIGH WATER MARK),最小化查看那16个block chunks需要被特殊对待所带来的负荷。
最普遍和最有意义的表碎片在于表数据可以被delete,我们可能担心"sparsely populated blocks".当你创建一张表,你指定了每个块预留多少空间为以后的update(显式的
在基于freelist或者隐式的基于ASSM)和多少空间空间这个块应该表被考虑作为可以insert的块的候选者。
如果使用ASSM,20%的空闲空间将不能被重用,因为ASSM要求一个block从‘full'到有空闲块,至少要25%的空闲空间。如果使用freelist space管理,freespace可能
有一个预先的设置,设置pctused比80稍高作为表storage参数。pctused为80,如果free space达到20%,block将返回到freelist列表。

你可能感兴趣的:(Fragment)