• 启用Oracle Enterprise Manager (EM) 内存参数
• 设置自动优化的内存参数
• 使用手动优化的SGA 参数覆盖最小大小
• 使用SGA Advisor 设置SGA_TARGET
- Oracle 数据库体系结构
Oracle 数据库体系结构
该幻灯片显示自动管理共享内存 (ASMM) 所涉及的关键 SGA 组件和进程。
SGA 组件共享池、大型池、Java 池、流池和默认缓冲区高速缓存参与 ASMM。监视和动
态调整大小由下列两个后台进程进行处理:内存管理器 (MMAN) 和可管理性监视程序
(MMON) 。
ASSM 基础结构取决于可管理性监视程序收集的统计信息,所以必须将
STATISTICS_LEVEL 参数设置为 TYPICAL或ALL ,以使用 ASMM。
注:ASH 缓冲区、排序区池和全局上下文池全部都包含在共享池中。
- 动态SGA 功能
• 实施基础结构,以使服务器可以在不关闭实例的情况下
更改其SGA 配置
• SGA 大小由SGA_MAX_SIZE进行限制:
– 用于在实例启动时保留虚拟内存地址空间
– 无法动态地进行更改
• 允许动态地调整某些SGA 组件的大小
SELECT bytes
FROM V$SGAINFO
WHERE name = 'Free SGA Memory Available';
动态SGA 功能
Oracle9i Database 中引入了动态 SGA 功能。系统全局区 (SGA) 在内部分为多个内存组件。
组件代表用于满足特定类的内存分配请求的内存池。最常配置的内存组件包括数据库缓冲
区高速缓存、共享池、大型池、Java 池和流池。
动态SGA 基础结构允许在不关闭实例的情况下调整某些 SGA 组件的大小,修改初始化参
数文件,以及重新启动实例。
此外,动态 SGA 基础结构还允许在运行时设置整个 SGA 使用的内存量的限制。限制内存
的参数为 SGA_MAX_SIZE。这是在实例启动时分配的内存量,与个别组件是否会利用全
部内存量无关。
注:在实例启动期间,如果 SGA 组件使用的所有内存的总和超过 SGA_MAX_SIZE分配
的数量,则将调整 SGA_MAX_SIZE的值,以满足内存要求。
- 区组
• SGA 内存以相邻的内存块(称为区组)为单位进行分配。
• 区组大小取决于估计的总SGA。如果估计的SGA 大小:
– 小于或等于1 GB,则区组大小为4 MB
– 大于1 GB,则区组大小为16 MB
SELECT bytes
FROM V$SGAINFO
WHERE name = 'Granule Size';
区组
SGA 内存以区组为单位进行分配。每个 SGA 组件使用的区组数量记录在动态性能视图中。
区组大小由总 SGA 大小决定。在大多数平台上,如果总 SGA 大小小于 1 GB,则区组大
小为4 MB,如果 SGA 大于1 GB,则区组大小为 16 MB 。某些平台的相关性会增加。例
如,在 32 位Windows 上,如果 SGA 大于 1 GB,则区组大小为 8 MB。
可以在 V$SGAINFO 视图中查看每个组件的 SGA 当前使用的区组大小。
- 内存指导
• 缓冲区高速缓存建议(在9 i R1 中引入):
– V$DB_CACHE_ADVICE
– 预测不同高速缓存大小的物理读取数
• 共享池建议(在9 i R2 中):
– V$SHARED_POOL_ADVICE
– 预测不同大小的共享池可以节省的分析时间
• Java 池建议(在9 i R2 中):
– V$JAVA_POOL_ADVICE
– 预测不同大小的Java 池可以节省的Java 类加载时间
• 流池建议(10 g R2)
– V$STREAMS_POOL_ADVICE
– 预测不同大小的溢出和未溢出活动
内存指导