暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
深入解析oracle-06.BufferCache与SharedPool原理
217
109页
6次
2021-04-30
5墨值下载
6
6
Buffer Cache
Buffer Cache
Shared Pool
Shared Pool
Buffer Cache Shared Pool SGA 中的最重要和最复杂的两个部分,在此我们拿出一点
篇幅来对 Buffer Cache Shared Pool 进行一点深入探讨。
6.1 Buffer Cache 原理
Buffer Cache Oracle SGA 中一个重要部分通常的数据访问和修改都需要通过 Buffer
Cache 来完成。当一个进程需要访问数据时,首先需要确定数据在内存中是否存在,如果数
据在 Buffer 中存在,则需要根据数据的状态来判断是否可以直接访问还是需要构造一致性
读取;如果数据在 Buffer 不存在,则需要在 Buffer Cache 中寻找足够的空间以装载需要的
数据,如果 Buffer Cache 中找不到足够的内存空间,则需要触发 DBWR 去写出脏数据,释
Buffer 空间
这样一个过程,描述起来并不复杂,但是在数据库的处理过程中实际上是相当复杂的。
在以上的描述中,有几个问题是我们需要考虑的,首先,Oracle 如何才能快速定位到 Buffer
中是否存在需要的数据呢?如果请求的数据在 Cache 中不存在,那么 Oracle 又是如何去
Buffer Cache 快速寻找内存空间呢?
6.1.1 LRU LRUW List
我们知道, Buffer Cache 中,Oracle 通过几个链表进行内存管理,其中最为熟知的是
LRU List LRUW List也经常被称为 Write/Dirty List,各种 List 上存放的是指向具体的
Buffer 的指针等信息
Oracle8 开始,为了实施增量检查点,Oracle 还引入了检查点队列- Checkpoint Queue
和文件队列 File Queue;从 Oracle8i 开始,由于异步 DBWn 的引入,现在关于各种 List
以及 Queue 的更为精确的概念是工作集(WS - Working Sets), WS 中包含几个不同
功能的 List,每 List 都通过 Cache Buffers LRU CHAIN Latch 进行保护,当 使 DBWR
进程时通过 DB_WRITER_PROCESSES 参数可以设置数据库使用多个 DBWR 进程
据库中会存在多个 WS,同使 Buffer Cache 的多缓冲池技术时,每个独立的缓冲池也
会存在各自独立的 WS
LRU List 用于维护内存中的 Buffer,按照 LRU 算法进行管理(在不同版本中,管理方
式有所不同),数据库初始化时,所有的 Buffer 都被 Hash LRU List 上管理。当需要从数
据文件上读取数据时,首先要在 LRU List 上寻找 Free Buffer,然 Buffer Cache
书名书名书名书名书名书名书名书名书名书名书名书名书名书名
·2·
中;当数据被修改之后,状态变为 Dirty,就可以被移动至 LRUW ListLRUW List 的都
是候选的可以被 DBWR 写出到数据文件的 Buffer,一 Buffer 要么在 LRU List 上,要么在
LRUW List 上存在,不能同时在这两个 List 上存在。
6-1 Buffer Cache LRU LRUW List 的简要示意图
6-1 LRU Write List
检查点队列Checkpoint Queue)则 ,同 RBA
和数据块关联起来,这样在进行增量检查点时,数据库可以按照数据块修改的先后顺序将其写
出,从而在进行恢复时,可以根据最后写出数据块及其相关的 RBA 开始进行快速恢复。在检
查点触发时 DBWR 根据检查点队列执行写出,在其他条件触发时,DBWR Dirty List 执行
写出。检查点队列的内存在 Shared Pool 内存中分配:
SQL> select * from v$version where rownum <2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
SQL> select * from v$sgastat where name='Checkpoint queue';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool Checkpoint queue 128320
同样具有相关 Latch 对其进行保护:
SQL> col name for a40
SQL> select name ,gets,misses from v$latch where name like '%checkpoint queue%';
NAME GETS MISSES
---------------------------------------- ---------- ----------
active checkpoint queue latch 98706 0
of 109
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜