一、引言:

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.

oracle设置memory_target,oracle初始化参数之memory_target相关推荐

  1. Oracle初始化参数之memory_target

    一.引言: Oracle 9i引入pga_aggregate_target,可以自动对PGA进行调整: Oracle 10g引入sga_target,可以自动对SGA进行调整: Oracle 11g则 ...

  2. 初始化参数之memory_target

    一.引言: Oracle 9i引入pga_aggregate_target,可以自动对PGA进行调整: Oracle 10g引入sga_target,可以自动对SGA进行调整: Oracle 11g则 ...

  3. oracle技术之查询初始化参数的方法(六)

    查询初始化参数的方法很多,比如SHOW PARAMETER,或查询V$PARAMETER等,这里简单总结一下. 这一篇描述CREATE PFILE的方法检查初始化参数. 前面介绍了很多种方法,这些方法 ...

  4. oracle adjusting parallel,Oracle 并行相关的初始化参数

    Oracle数据库并行操作,特别是在RAC环境,一定程度上能够提升数据库的性能,所以对相关的初始化参数的了解是必要的,这篇文章将根据实际的案例讨论Oracle数据库的部分并行参数. Oracle数据库 ...

  5. Oracle 设置nls,Oracle NLS_LANG设置

    1. NLS_LANG 参数组成 NLS_LANG参数由以下部分组成: NLS_LANG=_. NLS_LANG各部分含义如下: LANGUAGE指定: -Oracle消息使用的语言 -日期中月份和日 ...

  6. oracle设置提示符,Oracle关于设置SQLPLUS提示符样式的方法

    我想99%都是用到sqlplus来登陆数据库,对数据库进行管理.调优.配置.那么如果有很多台数据库的时候,我们在连接后全部是统一的 引题:大家在日常工作中,我想99%都是用到sqlplus来登陆数据库 ...

  7. oracle设置界面,Oracle SQL Developer 设置英文界面和字体

    摘要:Oracle SQL Developer 设置英文界面和字体 默认是中文界面,软件内部部分又是英文,看起来很乱,统一设置成英文,方法如下: 打开配置文件:\sqldeveloper\bin\sq ...

  8. sap oracle 内存参数,ORACLE 25个需要深思熟虑重要的初始化参数

    此内容摘自 ORACLE 11gR2性能调整与优化一书,做为一个自己的笔记 1 MEMORY_TARGET : 这个初始化参数设定分配给PGA和SGA 的所有内存(11g 新参数).设置了MEMORY ...

  9. oracle 从pflie启动,oracle初始化参数文件管理

    oracle实例是指运行状态下的oracle软件,是由内存结构跟一些进程结构组成的,主要实现数据库的访问跟控制功能,是oracle的核心. 初始化参数文件是oracle实例运行所需要的参数配置文件,o ...

  10. oracle数据库配置助手来初始化参数,使用服务器参数文件(SPFILE)管理初始化参数...

    传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...

最新文章

  1. 重磅!Science 上海交大发布最新“全世界最前沿的125个科学问题”!
  2. form表单序列化去除空值
  3. ledisDB底层实现——本质上就是用leveldb这样的底层存储,和ssdb一样,meta里存的是hash、list等的元数据...
  4. [Qt教程] 第46篇 进阶(六) 国际化
  5. [转载] 常用应届生Java开发笔试面试题(更新中)
  6. 对于一些作用域自己的理解,望能帮助某人
  7. docker下载地址及 设置自己的阿里云镜像加速器,Kubernetes(K8S) 安装
  8. BFS(广度优先搜素,附例题)
  9. java 正则表达式 tab_JAVA 正则表达式 (超详细)
  10. html把div做成透明,Html-Css-div半透明
  11. iMazing2021mac win最先进的苹果iPhone和iPad管理软件
  12. 2012第50周星期一自制力网摘
  13. Linux传输文件 rz
  14. chrome版本更新后,chromedriver对应版本更新
  15. 3.DesignForVias\1.AutoRoutingFirstSetp
  16. 关于“打开数据库时出错: 到主机 的 TCP/IP 连接失败。”的解决方法
  17. 信道容量的数值解法(非对称信道)
  18. Hibernate对象状态
  19. html 合并单元格 步骤总结
  20. 大型软件是否占用计算机内存,软件应用占用内存怎么查看

热门文章

  1. 一线城市房价下跌 机构称年内限购难放松
  2. 何如添加到将文章添加到首页
  3. MapControl与PageLayoutControl联动
  4. Solaris做desktop必装的10个软件
  5. redis数据类型之Set
  6. [洛谷P3613]睡觉困难综合征
  7. java中容器如何维护其内容
  8. CentOS7源码安装Python3
  9. UVA 11624 BFS
  10. ios8 gps定位不好用