相信很多人都知道,当使用了ASSM(auto segment space management),PCTUSED将不在有效。
但是,有多少人告诉你,为什么在ASSM中PCTUSED被忽略。
ASSM之前,Oracle使用freelist,freegroup来管理空闲的block。哪如何决定一个block是否可以加到freelist上?假设,如果block的空闲小于或等于PCTFREE,即从freelist上取消block,当做了一个delete或者update操作后,block的空闲比例大于20%,即又把该block加到freelist上,这样虽然可以最大化的使用block的空间,但是却加重了freelist的维护成本(频繁地从freelist上摘除和添加block,而且是排它的操作)。
这也就是为什么引入PCTUSED的原因,牺牲空间来换取维护freelist的效率。在block的空闲比例在PCTFREE和1-PCTUSED之间,有一个缓冲的空间。
ASSM抛弃了freelist管理空闲block的方法,换用了三级位图,使用extent的头块(不是每一个extent头块)来管理free block。这种设计,修改任一block空闲与否的状态,影响面非常小。频繁修改状态都不会再是问题,因此PCTUSED在ASSM下被忽略。