Oracle中PGA記憶體配置原則

來源:互聯網
上載者:User

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結構圖

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.