|
本帖最后由 vage 于 2012-11-27 07:53 编辑
写的好
当一个操作,走的是唯一索引的话,那么oracle默认目标block是存在于目标链上的,这时,oracle会以shared的模式去获取
cbc latch。如果之后oracle发现弄错了,这个目标块不存在于链上。那么这时,oracle再会尝试以exclsive模式去获得
cbc latch,以将block挂往链上。
原来很早前就有人发现这点了,我以为我是最早的,
除了唯一索引外,任何索引的Root块、枝块,都是以共享CBC Latch操作,叶块和表块以独占CBC Latch操作。这点应该没人比我更早发现了吧,这需要通过DTrace才能观察到。
唯一索引、Root、枝块使用共享CBC Latch的根本原因,也只能用DTrace、Gdb才能看到,哪就是用Latch代替了Buffer Pin锁(就是Buffer Busy Waits的锁),有共享CBC Latch的地方,不再有Buffer锁。关于这点,我有个文章总结:
揭密Oracle之七种武器之三:破译古老的谜题---共享CBC Latch的秘密
http://www.itpub.net/thread-1617245-1-1.html
|
|