当前位置:
文档之家› Oracle内存调优及优化思路
Oracle内存调优及优化思路
(续)
• BUFFER CACHE的命中率高,并不意味着数据库性能良好。 执行计划出错时,逻辑读高,但效率低下 “热”块争用时,逻辑读低,但效率低下
Flash cache特性
Buffer Cache种类
• Default buffer cache:数据块的默认缓冲池,与db_block_size参数有关 • Keep buffer cache:缓存热块 • Recycle buffer cache:缓存冷块
• 内存碎片化:
(续)
• 分割连续的内存导致的内存碎片(chunk大小不一致),如下图:
注意:
1 同一个BUCKET中的chunk不严格排序 2 内存碎片是不可避免的,相邻的碎片会定时合并
(续)
Oracle DBA 实战攻略
Oracle内存调优及优化思路
Oracle本质上是一个软件
• Oracle停止当前版本支持时间
Oracle体系结构
Oracle实例组成
Oracle连接过程
监听Байду номын сангаас作用
• 监听是连接客户端和Oracle数据库的“桥梁”,远程客户端进程只有 通过服务端的监听认证、转发才能连接到数据库。
• 数据库(数据文件)存放在磁盘中,buffer cache作为数据库的缓存 • 可以缓存不同大小的数据块,总体使用LRU算法为主淘汰无用的数据块 • 数据块的并发性访问受Latch保护
提示:多重缓存不仅带来浪费内存,而且会带来额外的开销,如内核调 用。所以我们建议使用裸设备、ASM存放数据文件。一般可以提高5% 左右的读取性能。
Buffer Cache的使用进程
• 前台进程:从磁盘中读数据块至buffer cache中 • DBWR进程:从buffer cache写数据块至磁盘中
提示:前台进程和DBWR进程可以有多个,严格来讲,同一时刻 只能由一个进程更改数据块(可以有多个进程读取数据块),所 以Buffer Cache中需要有latch来保护并发性访问数据块
谈谈BUFFER CACHE的命中率
• 从BUFFER CACHE中读取数据块一般需耗时100ns • 从磁盘读取数据块一般需耗时10ms左右(假设缓存没有命中),
所以我们一般建议数据块从buffer cache中读取。
(续)
• 问题:Buffer Cache的命中率越高越好?
BUFFER CACHE的命中率并不是越高越好,避免无效的数据 块读取才是数据库优化之根本
BUFFER CACHE中数据块争用的优化思路
• 重新设计应用 • 让数据块中的数据尽可能地分散 使用不同块大小的数据块 修改数据块PCTFREE参数 表中添加固定大小的列,增加冗余数据 使用HASH分区表和HASH 簇表 使用反转键索引(REVERSE INDEX) 增大BUFFER CACHE 合理使用KEEP POOL和RECYCLE POOL 使用ASSM(自动段空间管理) 加大数据块INTRANS参数
提示:Log Buffer不能实现在线动态调整
(续)
• SGA的组成:
SGA的一些重要属性
• 在Unix/Linux系统中,可以通过ipcs命令可以在操作系统级别观察共 享内存段
• 是数据库实例的重要组成部分,正常访问表数据的通道 • 属于计算性内存 • 内存碎片 • 内存交换
Buffer Cache的作用
续:
注意: 监听和实例是多对多的关系。一个监听可以服务于多个实例。重启主
机前一定要检查主机上是否运行着多少个监听。 监听串行处理客户端连接的会话。 监听的认证和转发只作用于会话连接的一瞬间。 监听的启停与关闭对已连接的会话不受影响。
Oracle内存组成
Oracle’s memory structure consists of two memory areas known as: • System Global Area (SGA): Allocated at instance startup, and is a
– Library cache – Data dictionary cache
• Sized by the parameter • SHARED_POOL_SIZE.
Shared pool
Library cache
Data dictionary cache
ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
提示:BUFFER CACHE中没有内存碎片这一说法
ALTER SYSTEM SET DB_CACHE_SIZE = 9600M;
BUFFER CACHE内存不足的优化思路
• 加大buffer cache内存 • 调整糟糕的SQL语句写法或执行计划 • DBWR进程数不足或者存储性能缓慢
提示:适当加大buffer cache内存是没有坏处的
(续)
• 使用直接路径读写(DIRECT PATH I/O) • CPU紧张的系统中,适当减小BUFFER CACHE • RAC系统中,提高本地节点的BUFFER CACHE命中率 • CPU、内存资源充足的情况下,增加buffer cache容量没有坏处
,但前提是不要产生换页
Shared Pool
fundamental component of an Oracle Instance • Program Global Area (PGA): Allocated when the server process is
started
SGA组成
• Buffer Cache:主要缓存数据块 • Shared Pool:缓存Cursor相关的信息和数据字典 • Log Buffer:缓存重做日志条目
The shared pool is used to store the most recently executed SQL statements and the most recently used data definitions.
• It consists of two key performance-related memory structures: