前面的章节我们介绍了Oracle为实现Cache Fusion引入的各种改变和新的概念。本节我们从RAC环境中可能发生的场景对Oracle Cache Fusion的实现进行更近一步的探讨。
| 从磁盘中读一个块
实例C希望读取块,这时需要通过主实例D(块的master)获得共享模式锁。
1.实例C的FG(Foreground Process)进程通过向实例D的LMS进程发送数据块(需要共享锁)请求来获得块的访问权限。
2.实例D发现块从未被读取到集群中的任何实例的缓冲区缓存中,并且也未被锁定。实例D的LMS进程将PR(x$kjbl的kjblgrant列显示KJUSERPR。)锁授予实例C,授予的锁为sl0(Shared-Local-noPI)。
3.实例C将块从共享磁盘读取到它的缓冲区缓存中(buffer cache),假设这个时候块的SCN为1000。
4.实例C在共享模式下有块,最后锁管理器更新资源目录(GRD)。
注:这时如果用10046跟踪会话那么你会发现等待事件如下:
WAIT #19446741324875049632: nam='gc cr grant 2-way' ela= 49 p1=7 p2=6867 p3=1 obj#=3214
tim=4597940025
WAIT #19446741324875049632: nam='db file sequential read' ela= 56 file#=7 block#=6867 blocks=1 obj#=3214 tim=4597941129