一, 监控缓冲区的命中率
1.1 oracle的内存结构
内存结构(SGA system global area)是oracle为一个实例分配的一组共享内存缓冲区, 它包含该实例的数据和控制信息. SGA在实例启动时被自动分配, 当实例关闭时被收回. 数据库的所有数据操作都通过SGA来进行.
SGA中内存根据存放信息的不同, 可以分为如下几个区域.
数据库缓冲区(Buffer Cache): 存放数据库中数据库块的copy. 它由一组缓冲块组成,这些缓冲块为所有与该实例相连的用户进程共享. 缓冲块的数目由初始化参数DB_Block_buffers确定, 缓冲块的大小由初始化参数DB_BLOCK_SIZE确定. 大的数据块可提高查询速度.
日志缓冲区(Redo Log Buffer): 存放数据操作的更改信息. 它们以日志项(redo entry)的形式存放在日志缓冲区中. 当需要进行数据库恢复时, 日志项用于重构或回滚对数据库所做的变更. 日志缓冲区的大小由初始化参数LOG_BUFFER确定. 大的日志缓冲区可减少日志文件IO的次数. 后台进程LGWR将日志缓冲区中的信息写入磁盘的日志文件中, 可启动ARCH后台进程进行日志信息归档.
共享池(shared pool): 包含用来处理的sql语句信息. 它包含共享sql区和数据字典存储区. 共享sql区包含执行特定的sql语句所用的信息. 数据字典区包含用于存放数据字典, 它为所有用户进程共享.
Cursors: 一些内存指针, 执行待处理的sql语句.
其他信息区: 除了上述几个信息区外, 还包括一些进程之间的通信信息(如封锁信息); 在多线程服务器配置下, 还有一些程序全局区的信息, 请求队列和响应队列等.
1.2 oracle数据库缓冲区的内部机制
Oracle用这一内存来防止不必要的数据块从磁盘重读. 理解oracle数据缓冲区如何操作, 是成功地运用它们调整数据库性能的关键.
在oracle8i<