|
最初由 google 发布
[B]每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%和<25%,也就是说位图其实采用了四个状态位来代替以前的pctused
问题2
ASSM号称对FREELIST竞争做了修改,但是从程序员的角度看:
对于从同一个BITMAP BLOCK里面获取FREE BLOCK的进程来说,他们之间仍然会需要排斥锁来获取和修改一个BIT,请问ORACLE对于这种锁的机制是怎样实现的?还是说每个进程独占某个BITMAP BLOCK? [/B]
assm 中 freelist 的功能被分散到多个 block中去了,甚至很多block中去了 。
以前freelist的header都是存放在segment header 中的 (freelist group > 1 也不过是一组freelist放一个block而已)
另: bitmap 的修改 比 freelist header 的修改速度快的多,不存在 锁 的问题,而是仅仅可能少量block存在着 cache buffer chain 的竞争 和 buffer pin 的竞争,这些都是 latch 一级而不是 lock 一级。
另: 和你第一个问题相关,若过多的block的剩余空间信息存储在同一个bitmap block中,则可能导致 cache buffer chain / buffer pin 等过度的latch的竞争从而导致和 freelist 一样的效果 。
我没确认是不是 一个 bitmap 任何情况下始终只保存 16个block的空间状态信息,bitmap也是一个树状的分级结构,是不是所有接点都这样没研究过,即使真的如此。 1/16 的空间,也不是什么太大的问题。 |
|