Oracle实例(Instance)
实例 -> 内存 -> 效率
- SGA 共享
- PGA 私有 临时
进程 - SMON
- DBWR
- PMON
- CKPT
- LGWR
- ARCH
- RECO
实例内存中存储 - 程序代码
- 缓冲数据(这部分内存即SGA)
- 会话有关的信息
- 进程通信相关信息, 如加锁
SGA信息可从v$sga v$sgainfo v$sgastat 中查看
高速缓冲区(Buffer Cache):
“命中”:逻辑读
“未命中”:物理读
提高命中率:增加缓存大小 告诉缓存过大将导致系统可使用的内存减小而使用虚拟内存, 从而降低系统性能 大小由DB_CACHE_SIZE指定
块(block):Oracle实例 进行读写的基本单位 提高数据库服务器的吞吐量 大小由DB_BLOCK_SIZE指定
缓冲区 - 空闲缓冲区 数据未被修改 数据被修改但已写入块中
- 脏缓冲区 修改但未被写入数据中
- 忙缓冲区 在使用的数据
LRU(Least Recently Used) 最近最少使用算法确定每次使用的缓冲区 如未找到足够的空闲缓冲区将激活DBWR后台进程
脏缓冲区一定时间一起写入 减少磁盘I/O,提高系统效率
重做日志缓冲区(Redolog)
通过redolog可以重新恢复数据, 先记录日志,再修改数据。 将重做日志写入缓冲区比直接写入文件快,LGWR将最近一段时间 的redolog一起写入文件。 减少磁盘访问,提高系统性能。 大小由LOG_BUFFER指定 redologbuffer越大 存储redolog越多 写 入次数减少 磁盘访问减少 系统性能提高。
共享池(Shared pool)
存储SQL执行有关的信息。 - 数据字典(要访问对象,如表、视图)高速缓冲区
- 库告诉缓存(SQL解析、执行计划等)
- 服务器告诉缓存(是否存在相同SQL) 相同包括大小写、空格数等 好的SQL可提高效率