怎么修改oracle占用的oracle设置内存大小小

oracle实例内存(SGA和PGA)调整 - 一切随风 - ITeye博客
博客分类:
一、名词解释
(1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
(2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。& 共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。
(3)缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。
(4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。
(5)Java池:Java Pool为Java命令的语法分析提供服务。
(6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。
二、分析与调整
(1)系统全局域:
& SGA与操作系统、内存大小、cpu、同时登录的用户数有关。可占OS系统物理内存的1/3到1/2。
a.共享池:
查看共享SQL区的使用率:
select(sum(pins-reloads))/sum(pins) "Library cache" from v$--动态性能表
这个使用率应该在90%以上,否则需要增加共享池的大小。
查看数据字典缓冲区的使用率:
select (sum(gets-getmisses-usage-fixed))/sum(gets) "Data dictionary cache" from v$--动态性能表
这个使用率也应该在90%以上,否则需要增加共享池的大小。
修改共享池的大小:
ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
b.缓冲区高速缓存:
查看数据库数据缓冲区的使用情况:
SELECT name,value FROM v$sysstat order by name WHERE name IN(''DB BLOCK GETS'',''CONSISTENT GETS'',''PHYSICAL READS'');
计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。
c.日志缓冲区
查看日志缓冲区的使用情况:
SELECT name, value
FROM v$sysstat WHERE name IN (''redo entries'',''redo log space requests'');
查询出的结果可以计算出日志缓冲区的申请失败率:&&
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。
d.大型池:
&&& 可以减轻共享池的负担,可以为备份、恢复等操作来使用,不使用LRU算法来管理。其大小由数据库的‘共享模式/db模式’如果是共享模式的话,要分配的大一些。
&&& 指定Large Pool的大小:
ALTER SYSTEM SET LARGE_POOL_SIZE=64M
e.Java池:
&&& 在安装和使用Java的情况下使用。
(2)PGA调整
a.PGA_AGGREGATE_TARGET初始化设置
&&& PGA_AGGREGATE_TARGET的值应该基于Oracle实例可利用内存的总量来设置,这个参数可以被动态的修改。假设Oracle实例可分配4GB的物理内存,剩下的内存分配给操作系统和其它应用程序。你也许会分配80%的可用内存给Oracle实例,即3.2G。现在必须在内存中划分SGA和PGA区域。
在OLTP(联机事务处理)系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20%
在DSS(数据集)系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%
在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP则为655MB。
b.配置PGA自动管理
不用重启DB,直接在线修改。
SQL& alter system set workarea_size_policy=auto scope=
System altered.
SQL& alter system set pga_aggregate_target=512m scope=
System altered.
SQL& show parameter workarea
NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TYPE&&&&&&& VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy&&&&&&&&&&&&&&&& string&&&&& AUTO --这个设置成AUTO
SQL& show parameter pga
NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TYPE&&&&&&& VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target&&&&&&&&&&&&&&&& big integer
c.监控自动PGA内存管理的性能
V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。
SQL& set lines 256
SQL& set pages 42
SQL& SELECT * FROM V$PGASTAT;
NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VALUE UNIT
---------------------------------------------------------------- ---------- ------------
aggregate PGA target parameter&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes&&& --当前PGA_AGGREGATE_TARGET的值
aggregate PGA auto target&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes&&& --当前可用于自动分配了的PGA大小,应该比PGA_AGGREGATE_TARGET 小
global memory bound&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes&&& --自动模式下工作区域的最大大小,Oracle根据工作负载自动调整。
total PGA inuse&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 6448128 bytes
total PGA allocated&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes&&& --PGA的最大分配
maximum PGA allocated&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes
total freeable PGA memory&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 393216 bytes&&& --PGA的最大空闲大小
PGA memory freed back to OS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes
total PGA used for auto workareas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 0 bytes&&& --PGA分配给auto workareas的大小
maximum PGA used for auto workareas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1049600 bytes
total PGA used for manual workareas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 0 bytes
maximum PGA used for manual workareas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 530432 bytes
over allocation count&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1118&&& --实例启动后,发生的分配次数,如果这个值大于0,就要考虑增加pga的值
bytes processed&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bytes
extra bytes read/written&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 4608000 bytes
cache hit percentage&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 96.14 percent&&& --命中率
16 rows selected.
--V$PGA_TARGET_ADVICE
SQL& SELECT round(PGA_TARGET_FOR_ESTIMATE/) target_mb,
&& ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
&& ESTD_OVERALLOC_COUNT
&& FROM v$pga_target_
The output of this query might look like the following:
TARGET_MB&& CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
63&&&&&& 23&&&&&&&&& 367
125&&&&&&& 24&&&&&&&&& 30
250&&&&&&& 30&&&&&&&&& 3
375&&&&&&& 39&&&&&&&&& 0
500&&&&&&& 58&&&&&&&&& 0
600&&&&&&& 59&&&&&&&&& 0
700&&&&&&& 59&&&&&&&&& 0
800&&&&&&& 60&&&&&&&&& 0
900&&&&&&& 60&&&&&&&&& 0
1000&&& 61&&&&&&&&& 0
1500&&& 67&&&&&&&&& 0
2000&&& 76&&&&&&&&& 0
3000&&& 83&&&&&&&&& 0
4000&&& 85&&&&&&&&& 0
可以看出当TARGET_MB 为375M是ESTD_OVERALLOC_COUNT=0,所以可以将PGA_AGGREGATE_TARGET设置成375M。
附:oracle SGA与PGA区别:
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收。
浏览 40491
浏览: 839368 次
来自: 成都
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
写得不错,交流群:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...Oracle 12C 新特性:限制PGA使用内存的大小_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle 12C 新特性:限制PGA使用内存的大小
来源:Linux社区&
作者:hbxztc
我们都知道,在12C之前,对于PGA内存的管理是使用PGA_AGGREGATE_TARGET参数来控制的,但这个参数也只是一个参考值,实例只是尽量保证总的PGA使用量在这个值范围内,当会话使用的PGA内存超过这个限制时,Oracle也不能做出什么强制措施来限制使用内存的大小。12.1.0.1版本中引入了新特性:使用PGA_AGGREGATE_LIMIT参数来限制Oracle实例PGA使用内存的上限。后台进程ckpt每三秒检查一次PGA使用的内存总量,如果超过限制就采取终止会话的方式来降低PGA内存的使用量,对于SYS用户进程和后台进程不包括job队列不会被终止掉。有了这个限制,不会造成PGA内存疯涨,导致内存耗尽。官方文档:/database/121/TGDBA/tune_pga.htm#TGDBA95344 默认地PGA_AGGREGATE_LIMIT参数为2G或200%的PGA_AGGREGATE_TARGET值或PROCESSES参数值*3M测试数据库版本12.1.0.2
SQL& select * from v$ & BANNER& & & & & & & & & & & & & & & & & & & & &
CON_ID -------------------------------------------------------------------------------- ---------- Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production& & & &
0 PL/SQL Release 12.1.0.2.0 - Production& & & & & & & & & & & & & & 0 CORE& & 12.1.0.2.0& Production& & & & & & & & & & & & & & & & 0 TNS for Linux: Version 12.1.0.2.0 - Production& & & & & & & & & & & & & 0 NLSRTL Version 12.1.0.2.0 - Production& & & & & & & & & & & & & & 0
查看PGA_AGGREGATE_LIMIT参数值大小为2GSQL& show parameter pga & NAME& & & & & & & & & &
VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_limit& & & & & big integer 2G pga_aggregate_target& & & & & &
big integer 250M
创建测试用户
SQL& alter session set container=pdb_ & Session altered. & SQL& create user & User created. & SQL& & Grant succeeded. & SQL& conn zx/zx@pdb_orcl Connected.
创建一个包用于演示占用PGASQL& create or replace package demo_pkg & 2& as& 3& & & & & type array is table of char(2000) index by binary_ & 4& & & & & g_ & 5& & 6& / & Package created.
查看当前会话sid和使用PGA内存情况SQL& select userenv('sid') & USERENV('SID') -------------- & & & & & & 22 --当前会话sid为22 SQL& select a.name, to_char(b.value, '999,999,999') bytes, & 2& & & &
to_char(round(b.value/), '99,999.9' ) mbytes & 3& & from v$statname a, v$mystat b & 4&
where a.statistic# = b.statistic# & 5& &
and a.name like '%ga memory%'; & NAME& & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
BYTES& & & & MBYTES ---------------------------------------------------------------- ------------ --------- session uga memory& & & & & & & & & & & & & & & & & & & & & & & & & 2,301,312& & &
2.2 session uga memory max& & & & & & & & & & & & & & & & & & & & & & & 2,424,824& & &
2.3 session pga memory& & & & & & & & & & & & & & & & & & & & & & & & & 3,715,176& & &
3.5 session pga memory max& & & & & & & & & & & & & & & & & & & & & & & 3,715,176& & &
3.5 --当前会话使用PGA内存为3.5MB
执行前面创建的包,查看PGA内存使用情况--循环执行200000次查看PGA内存使用情况 SQL& begin& 2& & & & & for i in 1 .. 200000 & 3& & & & & loop & 4& & & & & & & & & demo_pkg.g_data(i) := 'x'; & 5& & & & & & 6& & 7& / & PL/SQL procedure successfully completed. & SQL& select a.name, to_char(b.value, '999,999,999') bytes, & 2& & & &
to_char(round(b.value/), '99,999.9' ) mbytes & 3& & from v$statname a, v$mystat b & 4&
where a.statistic# = b.statistic# & 5& &
and a.name like '%ga memory%'; & NAME& & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
BYTES& & & & MBYTES ---------------------------------------------------------------- ------------ --------- session uga memory& & & & & & & & & & & & & & & & & & & & & & & & 470,213,072& &
448.4 session uga memory max& & & & & & & & & & & & & & & & & & & & & & 470,213,072& &
448.4 session pga memory& & & & & & & & & & & & & & & & & & & & & & & & 471,773,288& &
449.9 session pga memory max& & & & & & & & & & & & & & & & & & & & & & 471,773,288& &
449.9 --共使用449MB内存,可以算出循环执行次占用的PGA就会超过设置的2G SQL& begin& 2& & & & & for i in 1 .. 1000000 & 3& & & & & loop & 4& & & & & & & & & demo_pkg.g_data(i) := 'x'; & 5& & & & & & 6& & 7& / begin* ERROR at line 1: ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT --报错ORA-4036超过了PGA_AGGREGATE_LIMIT设置的2G
调整PGA_AGGREGATE_LIMIT为4G后再次执行报错的过程,就没有问题了SQL& conn / as sysdba Connected. SQL& alter system set PGA_AGGREGATE_LIMIT=4G; & System altered. & SQL& conn zx/zx@pdb_orcl Connected. SQL& begin& 2& & & & & for i in 1 .. 1000000 & 3& & & & & loop & 4& & & & & & & & & demo_pkg.g_data(i) := 'x'; & 5& & & & & & 6& & 7& / & PL/SQL procedure successfully completed. & SQL& show parameter pga & NAME& & & & & & & & & & & & & & & &
TYPE& & & & VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_limit& & & & & & & & & big integer 4G pga_aggregate_target& & & & & & & &
big integer 250M
取消PGA限制,设置pga_aggregate_limit=0即可。alter system set PGA_AGGREGATE_LIMIT=0;
更多Oracle相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
& (07月04日)
& (06月10日)
& (06月10日)
& (06月04日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款2009年11月 Oracle大版内专家分月排行榜第二2009年10月 Oracle大版内专家分月排行榜第二
2009年5月 Oracle大版内专家分月排行榜第三
2009年11月 Oracle大版内专家分月排行榜第二2009年10月 Oracle大版内专家分月排行榜第二
2009年5月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。您现在的位置: &&&&&&&&&&&&文章内容
快捷导航:
调整内存参数减少内存占用
来源:考试大&&&【相信自己,掌握未来,考试大值得信赖!】&&日
&&& 如何才能优化oracle的内存占用情况呢?为了开发的方便,想减少oracle平时占用的内存。下面就为您介绍一个通过调整oracle内存参数实现减少内存占用的方法,供您参考学习。&&& 解决方法:&&& 1.sqlplus “/ as sysdba"& 2. 3.create pfile='d:/cj.ora'& 然后去你的oracle安装目录&&& 找一个init数据库名。ora这样一个文件&&& 把几个oracle内存参数改小点&&& 一个2G的内存是如下配置的:&&& *.sga_max_size=712M&&& *.large_pool_size=8M&&& *.shared_pool_size=250M&&& *.sort_area_size=0.5M&&& *.db_cache_size=350M&&& 然后shutdown数据库&&& 1.& 2. 3.create spfile from pfile='d:/cj2.ora';& 4. 5.& 然后启动,就可以了。&&& 以上就是调整oracle内存参数,减少数据库内存占用的方法介绍。
&&& 考试大温馨提示:本内容来源于网络,仅代表作者个人观点,与本站立场无关,仅供您学习交流使用。其中可能有部分文章经过多次转载而造成文章内容缺失、错误或文章作者不详等问题,请您谅解。如有侵犯您的权利,请联系我们,本站会立即予以处理。
&&& 相关推荐:
来源:考试大-
责编:xxm&&&
&考试大网校:计算机等级考试网络课程试听
暂无跟贴,欢迎您发表意见
考试大Oracle认证考试评论排行
1.&&评论2条
2.&&评论2条
3.&&评论1条
4.&&评论1条
5.&&评论1条
6.&&评论1条
主讲:陈翠娥
12345678910
12345678910

我要回帖

更多关于 oracle 调整内存大小 的文章

 

随机推荐