oracle dba_seg,Oracle DBA 应知应会 -- PGA自动管理
PGA自動(dòng)管理
Process Global Area,也就是常說的Program Global Area,PGA是數(shù)據(jù)庫服務(wù)進(jìn)程的私有空間。包含全局變量數(shù)據(jù)結(jié)構(gòu)和控制信息,比如一個(gè)游標(biāo)的執(zhí)行空間,當(dāng)某個(gè)游標(biāo)執(zhí)行的時(shí)候,都需要在執(zhí)行該游標(biāo)的服務(wù)進(jìn)程的PGA里分配一個(gè)運(yùn)行空間。
調(diào)整PGA能夠提高數(shù)據(jù)庫的性能。總的來說,PGA空間越大,能夠得到越快的性能。拿排序來說,如果有足夠的PGA排序區(qū)(SORT AREA),那么所有的排序操作可以在內(nèi)存中完成,這樣的操作是最優(yōu)化的,稱為Optimal Execs。如果排序空間不足,那么就需要使用臨時(shí)表空間,將數(shù)據(jù)存儲(chǔ)到臨時(shí)段中,如果通過一次磁盤操作,完成排序工作,稱為1-Pass Execs,這種方式由于要進(jìn)行磁盤操作,效率大大降低。如果通過一次磁盤操作還不能完成,需要進(jìn)行多次磁盤交互,那么排序的效率就十分低下了,這種情況稱為M-Pass Execs。
Oracle 8i只能通過調(diào)整_area_size參數(shù)來調(diào)整PGA的性能。Oracle 9i有了革命性的改進(jìn)。DBA可以通過設(shè)置PGA_AGGREGATE_TARGET參數(shù)來限制PGA的大小,而由Oracle內(nèi)部的智能算法來自動(dòng)進(jìn)行PGA各種工作緩沖區(qū)的分配工作。當(dāng)WORKAREA_SIZE_POLICY設(shè)置為AUTO,PGA自動(dòng)管理就會(huì)起作用(這2個(gè)參數(shù)都可以動(dòng)態(tài)修改)。
要注意的是,Oracle 9i R2版本,PGA_AGGREGATE_TARGET只能控制獨(dú)立服務(wù)器模式的服務(wù)進(jìn)程的工作區(qū)域。共享服務(wù)器模式的連接還是由_Area_size來控制。Oracle 10g可以控制獨(dú)立服務(wù)器和共享服務(wù)器模式的所有工作區(qū)域。
一般情況下,如果使用裸設(shè)備,那么對(duì)于OLTP系統(tǒng)PGA_AGGREGATE_TARGET用以下公式來分配:
PGA_AGGREGATE_TARGET = ( 80%) 20%
對(duì)于OLAP系統(tǒng),可以按照下面的公式計(jì)算:
PGA_AGGREGATE_TARGET = ( 80%) 50%
要注意的是,以上只是一個(gè)建議的參數(shù)設(shè)置,如果要知道你的系統(tǒng)中設(shè)置什么樣的值比較合理,建議通過STATSPACK報(bào)告來進(jìn)行分析。具體的分析方法,請(qǐng)參照本章的相關(guān)章節(jié)。通過部分系統(tǒng)視圖也可以對(duì)PGA的使用情況進(jìn)行分析,得到響應(yīng)的優(yōu)化建議。
通過V$PGASTAT視圖可以得到PGA的詳細(xì)情況:
SELECT * FROM V$PGASTAT;
NAME VALUE
aggregate PGA target parameter 524288000 bytes
aggregate PGA auto target 463435776 bytes
global memory bound 25600 bytes
total PGA inuse 9353216 bytes
total PGA allocated 73516032 bytes
maximum PGA allocated 698371072 bytes
total PGA used for auto workareas 0 bytes
maximum PGA used for auto workareas 560744448 bytes
total PGA used for manual workareas 0 bytes
maximum PGA used for manual workareas 0 bytes
over allocation count 0 bytes
total bytes processed 4.0072E+10 bytes
total extra bytes read/written 3.1517E+10 bytes
cache hit percentage 55.97 percent
主要指標(biāo)的含義如下:
aggregate PGA auto target:Oracle可以用于PGA工作區(qū)的空間,一般比參數(shù)略小
total PGA used for auto workarea:系統(tǒng)實(shí)際使用的PGA空間。
maximum PGA used for auto workareas:上次數(shù)據(jù)庫啟動(dòng)后PGA空間達(dá)到的最大值
total PGA in used:當(dāng)前正在使用的PGA,可以從v$process的pga_used_mem字段中獲取
over allocation count:當(dāng)PGA_AGGREGATE_TARGET值過低的時(shí)候,擴(kuò)充的PGA空間。當(dāng)這個(gè)值不是0的時(shí)候,大多數(shù)情況下應(yīng)該增大該參數(shù)
以下指標(biāo)在Oracle 9i Release 2以后的版本具有的指標(biāo):
over allocation count:如果PGA_AGGRAGATE_TARGET太小,動(dòng)態(tài)擴(kuò)展PGA空間的次數(shù),如果系統(tǒng)的物理內(nèi)存足夠,那么應(yīng)該設(shè)置一個(gè)足夠大小的PGA_AGGRAGATE_TARGET,使該統(tǒng)計(jì)值為0
cache hit percentage:PGA工作區(qū)使用內(nèi)存的百分比,如果內(nèi)存足夠,那么這個(gè)值應(yīng)該接近或者等于100%
V$SQL_WORKAREA_HISTOGRAM:該視圖中存放了PGA的使用情況,通過該視圖可以了解PGA工作區(qū)域的使用情況,下面的語句可以檢查PGA的工作情況:
SELECT LOW_OPTIMAL_SIZE/1024 low_kb,(HIGH_OPTIMAL_SIZE+1)/1024 high_kb,
optimal_executions, onepass_executions, multipasses_executions
FROM v$sql_workarea_histogram
WHERE total_executions != 0;
LOW_KB HIGH_KB OPTIMAL_EXECUTIONS ONEPASS_EXECUTIONS MULTIPASSES_EXECUTIONS
8 16 156255 0 0
16 32 150 0 0
32 64 89 0 0
64 128 13 0 0
128 256 60 0 0
256 512 8 0 0
512 1024 657 0 0
1024 2048 551 16 0
2048 4096 538 26 0
4096 8192 243 28 0
8192 16384 137 35 0
16384 32768 45 107 0
32768 65536 0 153 0
65536 131072 0 73 0
131072 262144 0 44 0
262144 524288 0 22 0
這個(gè)視圖可以顯示各種工作區(qū)的使用情況,OPTIMAL_EXECUTIONS是不需要通過臨時(shí)表空間交換的操作的次數(shù)。ONEPASS_EXECUTIONS是需要進(jìn)行一次臨時(shí)表空間交換的操作次數(shù)。MULTIPASSES_EXECUTIONS是需要多次臨時(shí)表空間交換的操作次數(shù)。原則上,如果100%的操作都是內(nèi)存操作,是最佳的選擇。如果內(nèi)存不足,某些大型操作是ONEPASS的,也是可以接受的。出現(xiàn)MULTIPASSES的操作會(huì)引起性能的急劇下降。
V$SQL_WORKAREA_ACTIVE
這個(gè)視圖顯示當(dāng)前工作區(qū)的活動(dòng)情況。小于64K的小型排序不會(huì)被統(tǒng)計(jì)。通過該視圖可以監(jiān)控目前系統(tǒng)的工作區(qū)使用情況。比如:
SELECT to_number(decode(SID, 65535, NULL, SID)) sid,
operation_type OPERATION,trunc(EXPECTED_SIZE/1024) ESIZE,
trunc(ACTUAL_MEM_USED/1024) MEM, trunc(MAX_MEM_USED/1024) "MAX MEM",
NUMBER_PASSES PASS, trunc(TEMPSEG_SIZE/1024) TSIZE
FROM V$SQL_WORKAREA_ACTIVE
ORDER BY 1,2;
SID OPERATION ESIZE MEM MAX MEM PASS TSIZE
8 GROUP BY (SORT) 315 280 904 0
8 HASH-JOIN 2995 2377 2430 1 20000
9 GROUP BY (SORT) 34300 22688 22688 0
11 HASH-JOIN 18044 54482 54482 0
12 HASH-JOIN 18044 11406 21406 1 120000
以下是這些數(shù)據(jù)的含義:
SID:產(chǎn)生排序操作的SESSION ID
Operation:操作的類型
Esize:PGA管理器估計(jì)的本次操作需要的總內(nèi)存數(shù)量(單位是KB)
MEM:目前正在使用的內(nèi)存數(shù)量(單位是KB)
MAX MEM:該SESSION曾經(jīng)使用的最大PGA內(nèi)存數(shù)量(單位是KB)
PASS:0代表內(nèi)存排序,1代表1-pass排序,M代表M-PASS排序
TSIZE:轉(zhuǎn)儲(chǔ)到臨時(shí)表空間的大小(單位是KB)
對(duì)于ORACLE 9I RELEASE 2版本以后的數(shù)據(jù)庫,提供了2個(gè)新的視圖:
V$PGA_TARGET_ADVICE:提供PGA使用的建議數(shù)據(jù)
V$PGA_TARGET_ADVICE_HISTOGRAM:PGA建議直方圖
對(duì)于一個(gè)正在運(yùn)行的實(shí)際系統(tǒng),通過這2個(gè)視圖,可以了解如何配置PGA_AGGREGATE_TARGET是比較合適的。要使用這2個(gè)視圖,首先要設(shè)置statistics_level為TYPICAL或者ALL,如果該參數(shù)設(shè)置為BASIC,那么這兩個(gè)視圖不會(huì)提供任何數(shù)據(jù)。V$PGA_TARGET_ADVICE視圖提供PGA_AGGREGATE_TARGATE和PGA命中率以及PGA OVERALLOC的數(shù)量。比如:
SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM v$pga_target_advice;
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
在設(shè)置PGA_AGGREGATE_TARGET的時(shí)候,盡量選擇物理內(nèi)存可以支撐的,命中率比較高,并且ESTD_OVERALLOC_COUNT為0的建議值。在上面的例子里,PGA_AGGREGATE_TARGET取值的最小值是375,低于這個(gè)值,OVERALLOC是非零的。如果物理內(nèi)存充足,設(shè)置為4000M或者更高可以提高PGA的性能。
V$PGA_TARGET_ADVICE_HISTOGRAM視圖提供PGA使用情況的直方圖情況。通過這個(gè)統(tǒng)計(jì)直方圖,可以了解系統(tǒng)中每個(gè)大小規(guī)模的區(qū)域的使用情況,如果某類較小的工作區(qū)域產(chǎn)生了M-PASS的操作,那么說明PGA的設(shè)置偏小。
和ORACLE 8i比較,Oracle 9i的工作區(qū)管理更加靈活。Oracle 9i提供動(dòng)態(tài)工作區(qū)管理的能力。Oracle 8i下,分配的工作區(qū)域?qū)⒉粫?huì)歸還給操作系統(tǒng),會(huì)導(dǎo)致Oracle對(duì)物理內(nèi)存的過渡占用,嚴(yán)重的情況會(huì)導(dǎo)致系統(tǒng)產(chǎn)生換頁操作。Oracle 9i的工作區(qū)用完后會(huì)自動(dòng)歸還,這樣減輕了數(shù)據(jù)庫服務(wù)程序?qū)ξ锢韮?nèi)存的占用。
注1:PGA_AGGREGATE_TARGET參數(shù)在OpenVms操作系統(tǒng)下無效。
注2:由于BUG問題,在HP-UX 11.0下,如果使用oracle 9.0.1版本,設(shè)置PGA_AGGREGATE_TARGET會(huì)導(dǎo)致操作系統(tǒng)宕機(jī)。
總結(jié)
以上是生活随笔為你收集整理的oracle dba_seg,Oracle DBA 应知应会 -- PGA自动管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle adg的特点是什么,Ora
- 下一篇: linux下怎么编译贪吃蛇,Linux