【转】自动内存管理

简介: 文章转自:http://blog.csdn.net/tianlesoftware/article/details/5134819 文章转自:http://hongjun.blog.51cto.com/445761/992674 一、Auto Memory Management是Oracle10g提出来的一个新特性,在最新的Oracle11g数据库中又得到了进一步的发展。

文章转自:http://blog.csdn.net/tianlesoftware/article/details/5134819

文章转自:http://hongjun.blog.51cto.com/445761/992674

一、Auto Memory Management是Oracle10g提出来的一个新特性,在最新的Oracle11g数据库中又得到了进一步的发展。
    
    通过使用自动内存管理,Oracle数据库中的PGA和SGA内存之间可以互相转换,根据当前的工作负载来自动设定Oracle内存区域中的PGA和SGA的大小。这种间接的内存转换依赖于操作系统的共享内存的释放机制来获得内部实例的调优。目前这种技术可以应用于Linux, Solaris, HPUX, AIX 和Windows等操作系统上。 

    首先我们来回顾下Oracle10g的自动内存管理特性。在Oracle10g的数据库中,只有SHARED_POOL_SIZE、DB_CACHE_SIZE、LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZE五个SGA组件可以被自动调整,其中PGA的最大值由初始化参数PGA_AGGREGATE_TARGET决定,SGA的最大值由初始化参数SGA_TARGET决定。

    在Oracle11g数据库中,使用自动内存管理特性不再需要设定参数PGA_AGGREGATE_TARGET和SGA_TARGET,因为这两个参数都已经被修改成自动调优的,除非想指定PGA和SGA的最小值才需要设定这两个参数。

    在Oracle11g数据库中,则需要设置一个叫做MEMORY_TARGET的初始化参数,这个参数是指整个Oracle实例所能使用的内存大小,包括PGA和SGA的整体大小,在MEMORY_TARGET的内存大小之内,PGA和SGA所用的内存可以根据当前负载情况自动相互转换。

 

如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候,Oracle11g还提供了另外一个初始化参数MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态 调节MEMORY_TARGET的大小,但是不允许超过MEMORY_MAX_TARGET的值。

下面这张图简单明了的描述出了Oracle11g数据库内存大小的设定参数。

 

此外,Oracle11g数据库还提供了几个用于监控自动内存管理的视图: 
    V$MEMORY_DYNAMIC_COMPONENTS:描述当前所有内存组件的状态 
    V$MEMORY_RESIZE_OPS:循环记录最后800次的SGA大小调整请求 
    X$KMGSTFR:循环记录最后800次的SGA的转换地址 
    _MEMORY_MANAGEMENT_TRACING=23:对于所有的内存转换调整行为均记录保存为跟踪文件

二、

1、memory_max_target  是Oracle 11g新增加的一个参数,它规定Oracle实例能够使用OS多大的内存空间,memory_max_target和memory_target的大小不能大于/dev/shm,/dev/shm默认情况下为OS内容的50%。我们可以通过修改/etc/fstab来增加/dev/shm的大小。

如果memory_max_target和memory_target的大小大于/dev/shm则会提示如下错误:

ORA-00845: MEMORY_TARGET not supported on this system  

如果sga_target或sga_max_size大于memory_target则会提示如下错误:

ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least XXXM  

2、memory_target参数是为实现SGA和PGA的自动管理而设定的,memory_target=sga_target+pga_aggregate_target。memory_target的值不能大于memory_max_target。

3、sga_max_size 参数用于规定sga_target的大小。

4、sga_target 参数如果不为0则表示ASSM(Automatic Shared Memory Management)自动共享内存管理已开启。sag_target自动管理以下五个参数的大小:

  数据缓冲池:db_cache_size

  共享池:shared_pool_size

  大池:large_pool_size

  JAVA池:java_pool_size

  流池:straems_pool_size
  系统参数修改:alter system set 参数=值  scope=spfile/memory/both

相关文章
|
8月前
|
安全 C++ 容器
C++中的智能指针:自动内存管理的利器
C++中的智能指针:自动内存管理的利器
99 0
|
5月前
|
存储 Java 程序员
JVM自动内存管理之运行时内存区
这篇文章详细解释了JVM运行时数据区的各个组成部分及其作用,有助于理解Java程序运行时的内存布局和管理机制。
JVM自动内存管理之运行时内存区
|
5月前
|
存储 算法 Java
JVM自动内存管理之垃圾收集算法
文章概述了JVM内存管理和垃圾收集的基本概念,提供一个关于JVM内存管理和垃圾收集的基础理解框架。
JVM自动内存管理之垃圾收集算法
|
6月前
|
缓存 算法 Java
探索现代操作系统中的内存管理优化策略
【7月更文挑战第24天】本文深入探讨了现代操作系统中内存管理的高级技术与优化策略。通过分析内存分配、虚拟内存机制以及缓存策略,文章揭示了如何提升系统性能和资源利用率。针对操作系统开发者和高级用户,本文提供了实用的调优技巧和未来的发展方向。
|
6月前
|
监控 算法 Java
如何优化Java应用程序的内存管理
如何优化Java应用程序的内存管理
|
7月前
|
C++
C/C++内存管理(1):C/C++内存分布,C++内存管理方式
C/C++内存管理(1):C/C++内存分布,C++内存管理方式
|
编译器 C语言 C++
C++基础 之 C++ 中的内存管理问题
C++基础 之 C++ 中的内存管理问题
90 0
|
监控 安全 Java
JVM-09自动内存管理机制【内存分配和回收策略】
JVM-09自动内存管理机制【内存分配和回收策略】
144 0
|
存储 算法 Unix
C++内存管理基础
本文将讲述C++内存管理的相关知识。
82 0
|
存储 缓存 Java
深入理解Java虚拟机_自动内存分配管理_01
深入理解Java虚拟机_自动内存分配管理_01
118 0