初始化参数之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关系:

1 SQL> show parameter memory_target;
2
3 NAME TYPE VALUE
4 ------------------------------------ ----------- ------------------------------
5 memory_target big integer 316M
6 SQL> show sga;
7
8 Total System Global Area 330600448 bytes
9 Fixed Size 1336344 bytes
10 Variable Size 247466984 bytes
11 Database Buffers 75497472 bytes
12 Redo Buffers 6299648 bytes
13 SQL> alter system set memory_target=200m scope=spfile;
14
15 System altered.
16
17 SQL> alter system set sga_target=0 scope=spfile;
18
19 System altered.
20
21 SQL> alter system set pga_aggregate_target=0 scope=spfile;
22
23 System altered.
24
25 SQL> shutdown immediate;
26 Database closed.
27 Database dismounted.
28 ORACLE instance shut down.
29 SQL> startup
30 ORACLE instance started.
31
32 Total System Global Area 209235968 bytes
33 Fixed Size 1335528 bytes
34 Variable Size 201330456 bytes
35 Database Buffers 4194304 bytes
36 Redo Buffers 2375680 bytes
37 Database mounted.
38 Database opened.

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

1 SQL> col ksppinm for a20;
2 SQL> col ksppstvl for a20;
3 SQL> select a.ksppinm name,b.ksppstvl value
4 2 from x$ksppi a,x$ksppcv b
5 3 where a.indx = b.indx
6 4 and (a.ksppinm like '%sga_target%'
7 5 or a.ksppinm like '%pga_aggregate_target%');
8
9 NAME VALUE
10 ----------------------- -------------------
11 sga_target 0
12 __sga_target 142606336
13 pga_aggregate_target 0
14 __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错误。

1 [oracle@yft bin]$ oerr ora 00845
2 00845, 00000, "MEMORY_TARGET not supported on this system"
3 // *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized
4 // *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at leacle instance running on the system.
5
6 SQL> alter system set memory_max_target=400m scope=spfile;
7
8 System altered.
9
10 SQL> shutdown immediate;
11 Database closed.
12 Database dismounted.
13 ORACLE instance shut down.
14 SQL> startup
15 ORA-00845: MEMORY_TARGET not supported on this system

这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share memory(/dev/shm)而已。
[oracle@yft 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中可以找到更准确的错误描述:
1 Mon Feb 25 12:13:21 2013
2 Starting ORACLE instance (normal)
3 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.
4 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使之生效。

1 [root@yft ~]# vi /etc/fstab
2 tmpfs /dev/shm tmpfs defaults,size=420m 0 0
3
4 [root@yft ~]# mount -o remount /dev/shm
5 [root@yft ~]# df -h
6 Filesystem Size Used Avail Use% Mounted on
7 tmpfs 420M 0 420M 0% /dev/shm
8
9 SQL> startup
10 ORACLE instance started.
11
12 Total System Global Area 418484224 bytes
13 Fixed Size 1336932 bytes
14 Variable Size 406849948 bytes
15 Database Buffers 4194304 bytes
16 Redo Buffers 6103040 bytes
17 Database mounted.
18 Database opened.

初始化参数之memory_target的更多相关文章
- Oracle初始化参数之memory_target
一.引言: Oracle 9i引入pga_aggregate_target,可以自动对PGA进行调整: Oracle 10g引入sga_target,可以自动对SGA进行调整: Oracle 11g则 ...
- Spring MVC初始化参数绑定
初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 proper ...
- SpringMVC初始化参数绑定--日期格式
一.初始化参数绑定[一种日期格式] 配置步骤: ①:在applicationcontext.xml中只需要配置一个包扫描器即可 <!-- 包扫描器 --> <context:comp ...
- SpringMvc中初始化参数绑定
初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 proper ...
- springmvc的初始化参数绑定
一.springmvc的初始化参数绑定 此种和我们之前说的类型转换非常相似,可以看作是一种类型转换 在初始化参数绑定时 重要的是参数类型 -------------------单日期的绑定 二. 配 ...
- Qt中新建类构造函数的初始化参数列表
使用Qt-creator自动生成一个窗体应用程序时会自动创建一个新的类,我的程序中名为MyDialog,类的定义为: #ifndef MYDIALOG_H #define MYDIALOG_H #in ...
- JavaWeb---通过ServletConfig获取Servlet的初始化参数
package com.zyz; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import j ...
- web.xml的初始化参数
web.xml的初始化参数 ---------首先声明,这里所介绍的是web中context-param,init-param参数的初始化配置---------- ------------------ ...
- RCU-数据库初始化参数
C:\Windows\System32>sqlplus sys/As123456 as sysdba SQL> show parameter processes; SQL> shut ...
- web.xml中servlet初始化参数的设置
<context-param><param-name>param1</param-name><param-value>value1</param- ...
随机推荐
- 第三方JavaScript库有时会附带*.map文件的所用
第三方JavaScript库有时会附带*.map文件的所用:起到对源***.js文件进行源码转换和压缩的作用. 详见参考链接:JavaScript Source Map 详解
- NVIDIA-SMI打印信息解析
- CF1763C Another Array Problem
人类智慧题.harmis_yz 不会. 题意 \(\tt{Link}\) 给定一个序列 \(\{a_n\}\),可以进行若干次操作,每次可以选择 \(i,j(1 \le i < j \le n) ...
- Circos软件学习
circos 是一款perl 语言开发的画图软件,提供了染色体相关数据的一种可视化方式.其制作的图表精美,被科研工作者广泛使用.Circos可以对染色体相关数据进行可视化,以每条染色体为一个扇区,组成 ...
- CDS标准视图:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE
视图名称:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE 视图类型: 视图代码: 点击查看代码 @AbapCatalog.compiler.compareFilter: tru ...
- Hbase shell学习
通过Shell工具可以对云数据库HBase进行数据管理,包括建表.插入数据.删除数据和删除表等操作,本文介绍Shell的基本使用命令. 访问配置 如果使用的是云数据库HBase标准版,基本环境的配置操 ...
- linux:shell
关于shell 什么是shell? shell,是用c编写的,既是命令语言,也是一种程序设计语言 shell指一种应用程序,该程序提供一个界面,用户可通过该界面访问操作系统 什么是脚本? 脚本是一条文 ...
- Vim编辑器退出的多种方法
当文本编辑结束之后,通常需要退出编辑器.退出编辑器又分为4种情况:保存退出.正常退出.不保存退出及强制退出.下面简单说下吧! 1.先介绍一下保存退出.当我们编辑或修改好了文件内容,如图. 我们 ...
- uni-app组件 信息列表组件
之前我一直在,要想提高自己的代码质量, 就一定要封装自己的组件, 所以我就尽量使用自己的组件.这样可以提高自己的效率 写组件的好处:减少代码的冗余 封装组件的时候,为了不让子元素的padding, 影 ...
- mount命令及挂载本地yum源
mount命令 mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类 ...