OracleDB自动管理共享内存(一)

2014-11-24 09:03:58 · 作者: · 浏览: 3
启用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 – 预测不同大小的溢出和未溢出活动
内存指导 为了帮助调整最重要的 SGA 组件的大小,引入了很多指导,如下所示: V$DB_CACHE_ADVICE 包含的行预测与每行对应的高速缓存大小的物理读取数。 V$SHARED_POOL_ADVICE 显示有关不同池大小的共享池中估计的分析时间的信息。 V$JAVA_POOL_ADVICE显示有关不同池大小的 Java 池中估计的分析时间的信息。 V$STREAMS_POOL_ADVICE显示有关估计的溢出或未溢出邮件数,以及用于不同流池大小的溢出或未溢出活动的关联时间的信息。
在组件中手动添加区组 使用ALTER SYSTEM 命令动态地增加为组件分配的内存。 只有存在满足请求的足够可用区组时,才能成功地增加组件的内存使用量。 不会自动地从另一个组件释放内存区组来满足此增加请求。 可以减小组件大小,但是只有组件未使用释放的区组时才能实现此操作。
在组件中添加区组 可以通过发出 ALTER SYSTEM 命令,增加共享池或任何缓冲区高速缓存组件的大小。新大小将舍入至与区组大小最接近的倍数。只有存在满足请求的足够可用区组(SGA_MAX_SIZE减去所有 SGA 组件的当前大小)时,才能成功地使用 ALTER SYSTEM命令增加组件的内存使用量。服务器不会释放另一个组件的区组来支持 SGA 组件的增加。 必须确保实例拥有足够的可用区组来满足组件区组使用量的增加。如果存在可用区组,则服务器可以分配更多的区组,直到 SGA 大小达到 SGA_MAX_SIZE。 注:在调整 SGA 组件的大小时应记住,一部分 SGA 是固定的。此固定内存最少包含一个区组。
增加SGA 组件的大小 \
增加SGA 组件的大小 下表显示了内存分配的起点: NAME TYPE VALUE ------------- ----------- ----------------------- sga_max_size big integer 200M db_cache_size big integer 92M java_pool_size big integer 4M large_pool_size big integer 4M shared_pool_size big integer 84M streams_pool_size big integer 8M
自动管理共享内存:概览 使用动态SGA 和内存指导来自动适应工作量的变化 最大化内存使用率 帮助避免内存不足错误 消除了在使用SPFILE时的重新学习过程 \
自动管理共享内存:概览 自动管理共享内存 (ASMM) 是一项重要的自行管理功能。此功能可自动管理最重要的 SGA 组件,这样您就不必手动配置这些组件了。ASMM 使用内存指导数据来评估最佳的内存配置,然后使用动态 SGA 功能调整组件的大小。通过 ASMM 可以更有效地使用可用内存,从而减少了由采购其它硬件内存资源而导致的成本,并通过更加动态、灵活且更具适应性的内存管理方案,显著简化了 Oracle 数据库管理。 例如,在白天运行高并发性 OLTP 工作量的系统中,需要大量缓冲区高速缓存,必须配置缓冲区高速缓存和大型池来满足高峰期的要求。通过 ASMM,在运行 OLTP 工作量时,将为缓冲区高速缓存分配所需的内存,以优化缓冲区高速缓存访问。以后启动决策支持系统(DSS) 批处理作业时,内存将自动迁移到大型池,以便并行查询操作可以使用内存,而不会产生内存溢出错误。 注:通过 ASMM,如果使用 SPFILE ,则会在关闭时保存组件大小。可以继续使用上次关闭之前的大小,从而消除了重新学习过程。
SGA 调整大小参数:概览 使用ASMM,可以自动调整五个重要SGA 组件的大小。 不会自动优化非默认缓冲区池。 日志缓冲区不是动态组件,但是具有很合适的默认值。 \
SGA 调整大小参数:概览 如幻灯片中所示,激活 ASMM 时将自动优化五个最重要的池。这些池的参数被称为“自动优化的参数”。 “