Oracle初始化参数之memory_target

一、引言:

Oracle 9i引入pga_aggregate_target,可以自动对PGA进行调整;

Oracle 10g引入sga_target,可以自动对SGA进行调整;

Oracle 11g则对这两部分进行综合,引入memory_target,可以自动调整所有的内存,这就是新引入的自动内存管理特性。

二、本文说明:

操作系统:rhel 5.4 x32

数据库:oracle 11g r2

三、memory_target的介绍:

  3.1、下面通过示例了解一下memory_target的设置与PGA和SGA关系:

SQL> show parameter memory_target;

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
memory_target                 big integer 316M
SQL> show sga;

Total System Global Area  330600448 bytes
Fixed Size            1336344 bytes
Variable Size          247466984 bytes
Database Buffers       75497472 bytes
Redo Buffers            6299648 bytes
SQL> alter system set memory_target=200m scope=spfile;

System altered.

SQL> alter system set sga_target=0 scope=spfile;

System altered.

SQL> alter system set pga_aggregate_target=0 scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  209235968 bytes
Fixed Size            1335528 bytes
Variable Size          201330456 bytes
Database Buffers        4194304 bytes
Redo Buffers            2375680 bytes
Database mounted.
Database opened.

设置memory_target参数后,实际上Oracle会自动设置并调整一下两个参数来分配SGA和PGA的内存,这和Oracle 10g自动设置sga_target后分配db_cache_size和shared_pool_size的机制是一样的。

SQL> col ksppinm for a20;
SQL> col ksppstvl for a20;
SQL> select a.ksppinm name,b.ksppstvl value
  2     from x$ksppi a,x$ksppcv b
  3   where a.indx = b.indx
  4      and (a.ksppinm like ‘%sga_target%‘
  5  or a.ksppinm like ‘%pga_aggregate_target%‘);

NAME                                VALUE
-----------------------     -------------------
sga_target                           0
__sga_target                     142606336
pga_aggregate_target                 0
__pga_aggregate_target            67108864

3.2、讨论一下11g中memory_target设置和不设置对SGA/PGA的影响:

3.2.1、如果memory_target设置为非0值

(下面有四种情况来对SGA和PGA的大小进行分配)

 3.2.1.1、sga_target和pga_aggregate_target已经设置大小

如果Oracle中已经设置了参数sga_target和pga_aggregate_target,则这两个参数将各自被分配为最小值为他们的目标值。

memory_target = sga_target + pga_aggregate_target,大小和memory_max_size一致。

3.2.1.2、sga_target设置大小,pga_aggregate_target没有设置大小

那么pga_aggregate_target初始化值=memory_target-sga_target

 3.2.1.3、sga_target没有设置大小,pga_aggregate_target设置大小

那么sga_target初始化值=memory_target-pga_aggregate_target

3.2.1.4、sga_target和pga_aggregate_target都没有设置大小

Oracle 11g中对这种sga_target和pag_aggregate_target都没有设定大小的情况下,Oracle将对这两个值没有最小值和默认值。Oracle将根据数据库运行状况进行分配大小。但在数据库启动是会有一个固定比例来分配:

sga_target = memory_target*60%

pga_aggregate_target = memory_target*40%

3.2.2、如果memory_target没有设置或 = 0(在11g中默认为0)

11g中默认为0则初始状态下取消了memory_target的作用,完全和10g在内存管理上一致,完全向下兼容。(也有三种情况来对SGA和PGA的大小进行分配)

3.2.2.1、sga_target设置值,则自动调节SGA中的shared pool,buffer cache,redo log buffer,java pool,larger pool等内存空间的大小。PGA则依赖pga_aggregate_target的大小。sga和pga不能自动增长和自动缩小。

      3.2.2.2、sga_target和pga_aggregate_target都没有设置

SGA中的各组件大小都要明确设定,不能自动调整各组件大小。PGA不能自动增长和收缩。

3.2.2.3、memory_max_target设置而memory_target = 0这种情况先和10g一样,不做说明。 

三、ORA-00845

最后谈一下ORA-00845的由来和解决方案:

如果memory_max_target/memory_target设置过大,可能导致instance无法启动,报ORA-00845错误。

[[email protected] bin]$ oerr ora 00845
00845, 00000, "MEMORY_TARGET not supported on this system"
// *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized
// *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at leacle instance running on the system.

SQL> alter system set memory_max_target=400m scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share memory(/dev/shm)而已。

[[email protected] bin]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 395M     0  395M   0% /dev/shm

在Oracle 11g for linux中似乎是用了一种新的机制来管理共享内存段,而不是传统的sys /dev/shm了。在alert.ora中可以找到更准确的错误描述:

Mon Feb 25 12:13:21 2013
Starting ORACLE instance (normal)
WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the /dev/shm file system to be mounted for at least 419430400 bytes. /dev/shm is either not mounted or is mounted with available space less than this size. Please fix this so that MEMORY_TARGET can work as expected. Current available is 413466624 and used is 0 bytes. Ensure that the mount point is /dev/shm for this directory.
memory_target needs larger /dev/shm

解决的办法之一是增加tmpfs文件系统的容量:

修改/etc/fstab中tmpfs对应的行;将原来的tmpfs   /dev/shm  tmpfs defaults 0 0 改成tmpfs /dev/shm tmpfs default,size=1024M 0 0,这样tmpfs增大为1G,重新mount /dev/shm使之生效。

[[email protected] ~]# vi /etc/fstab
tmpfs                   /dev/shm                tmpfs   defaults,size=420m        0 0

[[email protected] ~]# mount -o remount /dev/shm
[[email protected] ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 420M     0  420M   0% /dev/shm

SQL> startup
ORACLE instance started.

Total System Global Area  418484224 bytes
Fixed Size            1336932 bytes
Variable Size          406849948 bytes
Database Buffers        4194304 bytes
Redo Buffers            6103040 bytes
Database mounted.
时间: 2024-10-13 00:17:51

Oracle初始化参数之memory_target的相关文章

Oracle 初始化参数文件pfile和spfile

pfile和spfile的区别 pfile :Oracle 9i之前,ORACLE一直采用PFILE方式存储初始化参数,该文件为文本文件,可以在操作系统级别修改.当spfile文件修改出现错误导致oracle无法启动时,可以使用 pfile文件启动数据库 spfile:从Oracle 9i开始,Oracle引入了SPFILE文件,该文件为二进制格式,不能通过手工修改,只能在sql下通过alter system set 修改其中的参数. 如 ALTER SYSTEM SET REMOTE_LOGI

Oracle初始化参数文件pfile和spfile

pfile和spfile的区别 pfile :Oracle 9i之前,ORACLE一直采用PFILE方式存储初始化参数,该文件为文本文件,可以在操作系统级别修改.当spfile文件修改出现错误导致oracle无法启动时,可以使用 pfile文件启动数据库 spfile:从Oracle 9i开始,Oracle引入了SPFILE文件,该文件为二进制格式,不能通过手工修改,只能在sql下通过alter system set 修改其中的参数. 如 ALTER SYSTEM SET REMOTE_LOGI

修改oracle初始化参数

1.初始化参数文件 启动实例,会读取初始化参数 (1)spfile (服务器参数文件)二进制文件 不能手动修改 spfile<SID>.ora SQL> show parameter spfile; NAME     TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile     string +DATA/orcl/spfileorcl.ora (2

Oracle 初始化参数 二三事,随记

(1) alter system set log_archive_dest_n='location=d:\一个存在的目录';  ---- 预期 但是如果“d:\一个存在的目录”不是一个有效的目录,则“d:\一个存在的目录”会归档到d盘根目录下,“一个存在的目录”将成为归档日志文件的前缀! 如何预防异常发生呢?那就是必须在目录后面加上路径标识符号“{\|/}” (2)

Oracle database 11g一些重要的初始化参数(一)

初始化参数文件位置 D:\app\Administrator\admin\orcl1\pfile\init.ora init.ora 1.diagnostic_dest 在11g中,有一种新的存储诊断信息的结构,称为自动诊断信息库(Automaticd Diagnostic Repository ADR). 用些参数指定目录位置,如$ORACLE_BASE/diag/rdbms/orcl/orcl.其中第一个orcl为数据库名,第二个orcl为实例名. 2. fixed_date 是11g中的一

oracle官方文档_查看初始化参数(举例)

原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46864217 记录了一下,使用oracle11g联机文档,查看初始化参数的步骤. 如果想查看,可以修改的初始化参数的概念信息,可以点击"Changing Parameter Values in a Parameter File"的项点,如下: 找到想要查看的参数,点击进入,如下: 小结: reference

ORACLE推导参数Derived Parameter介绍

Oracle的推导参数(Derived Parameters)其实是初始化参数的一种.推导参数值通常来自于其它参数的运算,依赖其它参数计算得出.官方文档关于推导参数(Derived Parameters)的概念如下: Derived Parameters Some initialization parameters are derived, meaning that their values are calculated from the values of other parameters.

RCU-数据库初始化参数

C:\Windows\System32>sqlplus sys/As123456 as sysdba SQL> show parameter processes; SQL> shutdow immediate; 数ORACLE 例程已经关闭. SQL> startup; ORACLE 例程已经启动. RCU-6107:_b_tree_bitmap_plans的数据库初始化参数先决条件失败 当前值为null.该值应null FALSE. alter session set "

pfile,spfile 初始化参数文件顺序【weber出品】

一.初始化参数文件 启动实例时会读取初始化参数文件.参数文件有两种类型: 1.服务器参数文件:这是首选类型的初始化参数文件.这是一个由数据库服务器写入或读取的二进制文件,不得手动进行编辑.此文件驻留在执行 Oracle 数据库的服务器中,而且永远存在,不受数据库关闭或启动的影响.这个文件通常称为服务器参数文件 (SPFILE).文件默认名为 spfile<SID>.ora,启动时会自动搜索此文件. 2.  文本初始化参数文件:这类初始化参数文件可由数据库服务器读取,但不能由其写入.必须使用文本