本文首先详细介绍了oracle 中buffer cache 的概念以及所包含的内存结构
然后结合各个后台进程(包括DBWRn、CKPT、LGWR 等)深入介绍了oracle 对于 buffer cache 的管理机制,并详细解释了oracle 为什么会采用现在的管理机制,是为了解决什么问题
比如为何会引入 touch 次数、为何会引入增量检查点等等
最后全面介绍了有关 buffer cache 监控以及调优的实用方法
bu ffer cache 的概念 用最简单的语言来描述 oracle 数据库的本质,其实就是能够用磁盘上的一堆文件来存储数据,并提供了各种各样的手段对这些数据进行管理
作为管理数据的最基本要求就是能够保存和读取磁盘上的文件中的数据
众所周知,读取磁盘的速度相对来说是非常慢的,而内存相对速度则要快的多
因此为了能够加快处理数据的速度,oracle 必须将读取过的数据缓存在内存里
而 oracle 对这些缓存在内存里的数据起了个名字:数据高速缓存区(db buffer cache),通常就叫做 buffer cache
按照 oracle 官方的说法,buffer cache 就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝
通过初始化参数:buffer_cache_size 来指定 buffer cache 的大小
oracle 实例一旦启动,该区域大小就被分配好了
buffer cache 所能提供的功能主要包括: 1) 通过缓存数据块,从而减少 I/O
2) 通过构造 CR 块,从而提供读一致性功能
3) 通过提供各种 lock、latch 机制,从而提供多个进程并发访问同一个数据块的功能
buffer cache 的内存结构 2
1 bu ffer cache概述 oracle 内部在实现其管理的过程