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错误。
[oracle@yft 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)而已。
[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中可以找到更准确的错误描述:
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使之生效。
[root@yft ~]# vi /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=420m 0 0 [root@yft ~]# mount -o remount /dev/shm
[root@yft ~]# 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.
Oracle初始化参数之memory_target的更多相关文章
- ORACLE初始化参数文件概述
ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...
- Oracle 初始化参数文件pfile和spfile
pfile和spfile差额 pfile :Oracle 9i之前.ORACLE使用我们一直PFILE存储的初始化参数,,能够在操作系统级别改动. 当spfile文件改动出现错误导致oracle无法启 ...
- [转]Oracle 初始化参数之cursor_sharing
本文转自:http://www.cnblogs.com/Richardzhu/archive/2013/01/21/2869837.html 一.Cursor_sharing简介: 这个参数是用来告诉 ...
- Oracle 初始化参数 二三事,随记
(1) alter system set log_archive_dest_n='location=d:\一个存在的目录'; ---- 预期 但是如果“d:\一个存在的目录”不是一个有效的目录,则“ ...
- oracle中的初始化参数文件
oracle初始化参数文件管理 oracle实例是指运行状态下的oracle软件,是由内存结构跟一些进程结构组成的,主要实现数据库的访问跟控制功能,是oracle的核心. 初始化参数文件是oracle ...
- oracle查询所有初始化参数(含隐含参数)
年龄大了,感觉记性不是很好了,还是重新做笔记了.最近在整理些稿子,顺便在记录下oracle查询所有初始化参数(含隐含参数): SELECT i.ksppinm name, i.ksppdesc des ...
- oracle中有关初始化参数文件的几个视图对比
涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...
- Oracle的参数文件
参数文件的作用: 它们是在数据库实例启动时候加载的,决定了数据库的物理结构.内存.数据库的限制及系统大量的默认值.数据库的各种物理属性.指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重 ...
- ORACLE推导参数Derived Parameter介绍
Oracle的推导参数(Derived Parameters)其实是初始化参数的一种.推导参数值通常来自于其它参数的运算,依赖其它参数计算得出.官方文档关于推导参数(Derived Parameter ...
随机推荐
- CentOS 编译 GCC 7.2
CentOS 编译 GCC 7.2 下载源码 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0. ...
- Android手机间无线互传功能探索及实现
年前研究了一下Android如何实现无线互传的功能,写了个小demo,最近无事,遂整理一下,与各位共享.前期调研发现,Android想要实现无线互传有以下几种技术:1,Bluetooth通行已久,简单 ...
- C# 解决VS2008在win7找不到输入序列号的地方
1.VS2008在Windows7 打开维护界面看不到可以输序列号的地方. 因为微软把他隐藏了. 2.我们可以借用工具把他显示出来 下载地址:http://www.zlsoft.com/techbbs ...
- C - Balanced Number HDU - 3709 (数位dp)
题目链接:https://cn.vjudge.net/contest/278036#problem/C 题目大意:手首先是T组数据,然后每一次输入两个数l,r,求这个区间里面满足以某个数字为中心的两侧 ...
- Ansible Tower系列 二(安装 Tower)【转】
文档:http://docs.ansible.com/ansible-tower/ 安装前检查 python版本为2.6 保持网络畅通 内存预留充足 安装用户为root 软件下载 下载地址:http: ...
- 百度编辑器ueditor 字符限制
百度编辑器ueditor 字符限制 默认只能输入10000个字符 修改 ueditor.config.js // ,wordCount:true //是否开启字数统计 // ,maximumWords ...
- springboot创建一个可执行的jar
让我们通过创建一个完全自包含的可执行jar文件来结束我们的示例,该jar文件可以在生产环境运行.可执行jars(有时候被成为胖jars "fat jars")是包含你的编译后的类和 ...
- apache本地配置多域名(wampserver本地配置多域名)
我们在本地开发时,一般是在浏览器输入 http://localhost/项目文件夹名来测试网页文件,你有没有想过在本地在浏览器输入你自己设定的一个域名进入项目文件夹中去,本地配置多域名可以测试二级域名 ...
- 关于vim复制剪贴粘贴命令的总结
最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删除): 剪切其实也就顺带删除了所选择的 ...
- input标签的事件汇总
我在做一个注册时用到了,在网上查的,比较碎.就汇总了下, 1.onfocus 当input 获取到焦点时触发 2.onblur 当input失去焦点时触发,注意:这个事件触发的前提是已经获取了焦点 ...