当前位置: 首页 > 数据库 > 存储技术 > 正文

buffer cache实验1:内存结构图解

时间:2015-12-06 还不算晕

1.为什么要使用buffer cache???

buffer cache就是一块含有许多数据块的内存区域,这些数据块主要都是数据文件里的数据块内容的拷贝。

从buffer cache中读取一个数据块一般需要100ns左右,从一般的存储硬盘中读取一个数据块需要10ms;所以大概算一下,从内存中读取数据块比从硬盘中快近十万倍。

故oracle在读取数据块时,先在buffer cache中查找,如存在,则读取--逻辑读;如果数据块不存在,则发生物理读,从物理文件中将数据读入buffer cache(不考虑直接读的情况)。

在初始化参数中,设置buffer cache大小的参数是db_cache_size

在11.2.0.4.0中此参数支持动态修改:

BYS@ bys3>show parameter db_cache_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_cache_size                        big integer 48M

BYS@ bys3>alter system set db_cache_size=40M;

System altered.

BYS@ bys3>show parameter db_cache_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_cache_size                        big integer 40M

buffer cache所提供的功能主要包括:

1) 通过缓存数据块,从而减少I/O。

2) 通过构造CR块,从而提供读一致性功能。

3) 通过提供各种lock、latch机制,从而提供多个进程并发访问同一个数据块的功能。

2.buffer cache的内存结构图解

话说大神们都用WORD画图,为了模仿大神, 我也用WORD画了好久的原创:

从这张buffer cache的内存结构图,用一句话来说明

buffer cache中 结构大致是:buffer pool--->working set--->CBC latch--->hash bucket--->hash chain--->buffer header--->buffer dba

下面就把这些结构的概念大致说明一下: --更详细的的在之后