11、 LRU list 由内部参数_db_block_lru_latches控制, 8i以前,只有一个list在cache里。从Oracle8开始,CKPTQ(checkpoint queues) 和FQ (file queues)被引入。随着异步DBWn引入,list的管理也随之变化。现在正确称呼,应该是“working sets,”,包含几个不同的LRU lists。每个LRU是受cache buffers lru chain latch,保护的。
12、 LRU Lists与working set
n 每一对LRU/LRUW称为一个working set,buffer通过循环使用的方式分配到这些working set中。在高负载的读取和过多的LRU扫描下,LRU latch可能成为一个瓶颈。此外,LRU latch在多路并发系统中也不好衡量。应为多个CPU可能都会请求单独的LRU latch。通过设置内部参数_DB_BLOCK_LRU_LATCHES,可以改善LRU的竞争情况。每个LRU latch都是一个working set。每个working set拥有自己的链表,管理属于它的buffer。如果一个latch不能访问,那么就会转向下一个,直到获得一个成功的latch。在事件管理中,如果请求latch失败,那么miss就会增加。LRU latch的请求最初是NOWAIT模式,如果在它请求完所有latch都仍然没有成功后,就会变为WAIT模式。
n 进程访问所有的latch直到它获得一个LRU latch。在多个DBWR的环境下,每个DBWR都有自己的LRU/LRUW,通过设置db_writer_processes可以更改DBWR的数目。
13、 Working Sets
n Working Sets = DBWRs x Maximum number of buffer pools (8).
n 它包含如下list:
Ø LRU:
Ø LRU-W:记录dirty buffer
Ø LRU-P:Ping list(RAC)
Ø LRU-XO::对象重用list,针对drop和truncate
Ø LUR-XR:块重用list
Ø Thread CKPT queue:线程CKPT buffer
Ø File CKPT queue:文件CKPT buffer queue
Ø Recovery CKPT queue:执行恢复的块
14、 LRU和buckets/chains不同:
n 用于寻找某一指定的hash buckets/chains
n LRU提供寻找空闲buffer的方法,从list尾部开始找。
n Buffer header内容可以通过访问X$BH表来访问。
15、 Buffer Get
请求一个buffer,首先会填充一个buffer descriptor,步骤如下:
n 填充一个buffer descriptor
n 指定buffer的占有模式
n 缓存数据块
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/347643/viewspace-619858/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/347643/viewspace-619858/