首页 > 代码库 > select的逻辑读的过程
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锁???
独占:是不是要去修改一个数据
共享:是不是要读取一个数据
select的逻辑读的过程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。