select的逻辑读的过程

select的逻辑读
逻辑读:=== db block gets +consistent gets

第一步:算出dba ---------------->找到DBA,5号文件,9509号块???????
第二步:根据第一步做hash运算。算出在哪个bucket上面,比如是100。
第三步:在hash table上找100号bucket(数组:初始值+offset)
第四步:在搜索cache buffer chain链表前会在100号bucket加一把独占的latch锁找到了bucket入口,在bucket上挂着BH(buffer head)
获取一此latch在10 负6次级别
desc v$latch_children
select name from v$latch_children;
第5步:在CBC latch保护下服务器进程去搜索cache buffer chain ,找BH.
第6步:如果在CBC上找到BH,在找到的BH上加上共享的buffer ping锁(中级队列所)
第7步:释放HASH latch锁
第8步:从BH中读到BA(BUFFER ADDRESS),通过BA找到我们的BUFFER cache中所要的buffer,开始逻辑读
第9步:逻辑读完成时,获取CBC latch
第10步:释放buffer ping锁
第11步:释放CBC latch


在整个逻辑读的过程中两个CBC latch ,一次 buffer pin?
为什么加独占的latch锁???
独占:是不是要去修改一个数据
共享:是不是要读取一个数据

posted @ 2014-10-27 22:36  修行从29开始  阅读(228)  评论(0编辑  收藏  举报