8.Oracle深度学习笔记——BUFFER CACHE深入一
欢迎转载,转载请标明出处: http://blog.csdn.net/notbaron/article/details/50597346
最近项目一直和ORACLE死磕,感觉总是找不到出口,只能多看书少说话了。
先记录多少是多少吧!
BUFFER CACHE在ORACLE的所有内存池中占了最大空间。
1. HASH链表
Oracle通过HASH算法确定文件中的块是否在BUFFERCACHE中。
HASH算法在搜索算法中最快的,在内存中搜索数据的算法都是采用HASH算法。
HASH中有一个概念叫做Bucket,数量由参数_db_block_hash_buckets参数设置。
每当要读取一个数据块的时候,根据块艘在的文件、块号计算一个HASH值。通过HASH值得到BUCKET,就可以得到BUCKET中的内容。
BUCKET中保存一个指向CacheBuffers Chain的链表头的指针。
每个Buffer都有一个BufferHeader叫做Buffer Header (简称BH).
HASH值一样的BUFFERHeader组成链表,链表叫做CBC链表(Cache Buffer Chains)
BUFFERCAHCHE 哈希表的BUCKET中,存放的CBC链表头。
Oracle查找BUFFER的过程大概是这个样子的:
数据库要找某个号的块,那么先根据文件号、块号计算块的HASH值,然后通过HASH值找到对应的BUCKET,BUCKET指向CBC链头,然后在链表搜索每个BH(文件号,块号),取出其中的BA,根据BA找个需要的BUFFER。
PS:BH中包含BA( BufferAddress)是块在BUFFER CACHE中的地址,根据这个地址可以直接访问BUFFER。
当然,到这里故事并没有结束,如果遍历完链表没有找到BUFFER,说明块没有在BUFFER中,只能物理读了。
2. Latch:Cache Buffers Chain
Oracle机制关于访问共享内存,需要Latch和Mutex.
搜索列表,访问BH中的BA,都需要LATCH保护。 CacheBuffers Chian Latch检查CBC Latch.
想访问链表,必须先申请CBC LATCH,在链表中寻找目标BH,需要对BH修改,修改是为了加锁(Buffer Pin锁),加锁完毕后CBC Latch释放。Buffer Pin锁保护访问的Buffer.
CBC Latch期间主要是:搜索链表,查找BH,然后修改BH中的Buffer Pin锁。
主要注意的是一个CBCLatch其实是保护好几个Bucket的,意味着一个多个链表使用了同一Latch,所以这些链表不能再同一时间进行搜索了。Oracle这样的目的是为了节约内存。
查看CBC Latch使用的内存量如下:
sys@PDB1> select to_number(b.addr,'xxxxxxxxxxxxxxxxxxxxx')-to_number(a.addr,'xxxxxxxxxxxxxxxxxxxxx') from(select rownum rid,addr from v$latch_children where name='cache buffers chains'order by addr) a, (select rownum rid,addr from v$latch_children wherename='cache buffers chains' order by addr) b where a.rid=b.rid+1 andrownum<=1;
TO_NUMBER(B.ADDR,'XXXXXXXXXXXXXXXXXXXXX')-TO_NUMBER(A.ADDR,'XXXXXXXXXXXXXXXXXXXXX')
-----------------------------------------------------------------------------------
192
每个CBC Latch的大小为192个字节。
释放Buffer Pin锁的时候,还要修改BH中的Buffer Pin锁,同样需要CBCLatch保护。
3. CBC Latch竞争
l 多个进程以不兼容模式申请某一CBC Latch,访问此CBC Latch保护的不同链表和不同BH
l 多个进程以不兼容模式申请某一CBC Latch,访问此CBC Latch保护的同一链表和同一BH
热链和热块竞争。
热链竞争可以通过修改_db_block_hash_buckets和_db_block_hash_latches来控制BUCKETS 和LATCH数量,重新计算BUCKET和BH的对应关系。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net