【转】自动内存管理

简介: 文章转自: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

相关文章
|
3月前
|
存储 机器学习/深度学习 算法
内存学习(六):引导内存分配器(初始化)
内存学习(六):引导内存分配器(初始化)
50 0
|
1月前
|
安全 C++ 容器
C++中的智能指针:自动内存管理的利器
C++中的智能指针:自动内存管理的利器
22 0
|
11月前
|
监控 安全 Java
JVM-09自动内存管理机制【内存分配和回收策略】
JVM-09自动内存管理机制【内存分配和回收策略】
59 0
|
存储 缓存 Java
深入理解Java虚拟机_自动内存分配管理_01
深入理解Java虚拟机_自动内存分配管理_01
83 0
|
存储 算法 Java
jvm自动内存管理机制 之 java内存区域
jvm自动内存管理机制 之 java内存区域
90 0
|
算法 程序员 调度
3.1操作系统(内存管理的概念 分配与回收 空间的扩充)
一.内存 1.什么是内存?有何作用? 几个常用的数量单位 2.进程运行的基本原理 1. 指令的工作原理 2.逻辑地址vs物理地址 3.从写程序到程序运行 4.装入的三种方式 1.绝对装入 2. 可重定位装入(静态重定位) 3. 动态运行时装入(动态重定位) 5.链接的三种方式 1. 静态链接 2. 装入时动态链接 3. 运行时动态链接 二、内存管理的概念 1.内存空间的分配与回收 1.单一连续分配 2. 固定分区分配 3. 动态分区分配 (1)系统要用什么样的数据结构记录内存的使用情况? (2)当很多个空闲分区都能满足需求时,应该选择哪个分区
3.1操作系统(内存管理的概念 分配与回收 空间的扩充)
|
存储 算法 安全
JVM 内存分配机制,一次讲够!(中)
本文主要讲述 JVM 内存分配机制细节, 包含如下内容: Java 对象创建过程 对象的内存结构和指针压缩 对象的内存分配过程 逃逸分析 内存回收策略 4 种引用类型 本文所提到的 JVM 分配都是基于 jdk-1.8 版本
139 0
JVM 内存分配机制,一次讲够!(中)
|
缓存 Java
JVM 内存分配机制,一次讲够!(下)
本文主要讲述 JVM 内存分配机制细节, 包含如下内容: Java 对象创建过程 对象的内存结构和指针压缩 对象的内存分配过程 逃逸分析 内存回收策略 4 种引用类型 本文所提到的 JVM 分配都是基于 jdk-1.8 版本
105 0
|
存储 缓存 Java
JVM 内存分配机制,一次讲够!(上)
本文主要讲述 JVM 内存分配机制细节, 包含如下内容: Java 对象创建过程 对象的内存结构和指针压缩 对象的内存分配过程 逃逸分析 内存回收策略 4 种引用类型 本文所提到的 JVM 分配都是基于 jdk-1.8 版本
292 0
JVM 内存分配机制,一次讲够!(上)
|
存储 Java
JAVA虚拟机 自动内存管理机制(一)
运行时数据区域 java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同数据区域。有的区域随着虚拟机进程的启动而存在,而有的区域依赖用户的线程的启动与结束而建立和销毁。java虚拟机所管理的内存主要包括以下几个运行时的数据区域。
1976 0