视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle中PGA内存分配原则
2020-11-09 10:35:26 责编:小采
文档


Oracle在评估执行计划时会更具PGA_AGGREGATE_TARGET参数评估在sort,HASH_JOIN或Bitmap操作时能够使用的最大或最小内存,从而选择

pga_aggregate_target 通常缩写为P_A_T,该参数同时全局pga分配和私有工作区内存分配

在Oracle9i以及10gr1中,单个sql操作内存使用存在如下:

对于串行操作,单个sql操作能够使用的pga内存按照一下原则分配:

MIN(5%*PGA_AGGREGATE_TARGET,100MB)

此处的5%*PGA_AGGREGATE_TARGET实际上是由_smm_nax_size决定的,该参数自动工作区模式下最大的工作区使用

对于并行操作:

30%PGA_AGGREGATE_TARGET/DOP(DOP=DEGREE IF PARALLELISM,并行度)

在oracle10gr2以及oracle11g中,内存使用存在如下:

对于串行操作,能够使用的pga内存按照以下原则分配:

如果P_A_T<500MB,则_smm_max_size=20%P_A_T

如果P_A_T在500MB和1000MB之间,_smm_max_size=100MB

如果P_A_T介于1001MB和2560MB之间,_smm_max_size=10%*P_A_T

如果P_A_T>2560MB则_smm_max_size=262060MB

对于并行操作,能够使用的pga内存按照以下原则分配:

50%PGA_AGGREGATE_TARGET/DOP (DOP=Degree of parallelism,并行度)

但是注意,当dop<5时,_smm_max_size生效,并行度超过5时另外一个并行的参数_smm_px_max_size才会生效

从oralce10g开始 pga算法受一个新增的隐含参数_newsort_abled影响,如果将该参数设置为false,,则数据库会使用之前oracle9i中的算法规则:

sys@ORCL>@gethidpar.sql

输入 name 的值: newsort_enabled

原值 4: and x.ksppinm like'%&name%'

新值 4: and x.ksppinm like'%newsort_enabled%'

KSPPINM KSPPSTVL

_newsort_enabled TRUE

上述@gethidpar.sql内容:

select x.ksppinm,y.ksppstvl,x.ksppdesc from x$ksppi x,x$ksppcv y wherex.indx=y.indx

and y.inst_id=userenv('Instance')

and x.inst_id=userenv('Instance')

and x.ksppinm like '%&name%';

要理解pga的自动调整,还需要区分可调整内存(TUNABLE MEMORY SIZE) 与不可调整内存(UNTUNABLE MEMORY SIZE),可调整内存是由sql工作区使用的,其余部分是不可调整内存

Oracle在评估执行计划时会更具PGA_AGGREGATE_TARGET参数评估在sort,HASH_JOIN或Bitmap操作时能够使用的最大或最小内存,从而选择最优的执行计划

对于一个单纯的数据库服务器,通常我们需要保存20%的物理内存给操作系统使用,剩余80%可以分配给oracle使用,而oracle的内存由pga和sga构成,pga可以占用oracle消耗内存的20%(OLTP系统)至50%(DSS系统)

通过v$process 可以查询pga的相关使用情况:

V$PROCESS displays information about the currently active processes.

Column

Datatype

Description

ADDR

RAW(4 | 8)

Address of the process state object

PID

NUMBER

Oracle process identifier

SPID

VARCHAR2(24)

Operating system process identifier

PNAME

VARCHAR2(5)

Name of this process

USERNAME

VARCHAR2(15)

Operating system process username

Note: Any two-task user coming across the network has "-T" appended to the username.

SERIAL#

NUMBER

Process serial number

TERMINAL

VARCHAR2(30)

Operating system terminal identifier

PROGRAM

VARCHAR2(48)

Program in progress

TRACEID

VARCHAR2(255)

Trace file identifier

TRACEFILE

VARCHAR2(513)

Trace file name of the process

BACKGROUND

VARCHAR2(1)

1 for a background process; NULL for a normal process

LATCHWAIT

VARCHAR2(8)

Address of the latch the process is waiting for; NULL if none

LATCHSPIN

VARCHAR2(8)

This column is obsolete

PGA_USED_MEM

NUMBER

PGA memory currently used by the process

PGA_ALLOC_MEM

NUMBER

PGA memory currently allocated by the process (including free PGA memory not yet released to the operating system by the server process)

PGA_FREEABLE_MEM

NUMBER

Allocated PGA memory which can be freed

PGA_MAX_MEM

NUMBER

Maximum PGA memory ever allocated by the process

更多详情见请继续阅读下一页的精彩内容:

相关阅读:

修改Oracle数据库SGA和PGA大小

Oracle内存结构研究-PGA篇

Oracle在专用与共享的模式下SGA和PGA的区别

Oracle 内存管理PGA

Oracle内存全面分析之PGA

Oracle的内存分配-内存分配(SGA和PGA)SGA和PGA结构图

下载本文
显示全文
专题