oracle dba_seg,Oracle DBA 应知应会 -- PGA自动管理
PGA自動管理
Process Global Area,也就是常說的Program Global Area,PGA是數據庫服務進程的私有空間。包含全局變量數據結構和控制信息,比如一個游標的執行空間,當某個游標執行的時候,都需要在執行該游標的服務進程的PGA里分配一個運行空間。
調整PGA能夠提高數據庫的性能。總的來說,PGA空間越大,能夠得到越快的性能。拿排序來說,如果有足夠的PGA排序區(SORT AREA),那么所有的排序操作可以在內存中完成,這樣的操作是最優化的,稱為Optimal Execs。如果排序空間不足,那么就需要使用臨時表空間,將數據存儲到臨時段中,如果通過一次磁盤操作,完成排序工作,稱為1-Pass Execs,這種方式由于要進行磁盤操作,效率大大降低。如果通過一次磁盤操作還不能完成,需要進行多次磁盤交互,那么排序的效率就十分低下了,這種情況稱為M-Pass Execs。
Oracle 8i只能通過調整_area_size參數來調整PGA的性能。Oracle 9i有了革命性的改進。DBA可以通過設置PGA_AGGREGATE_TARGET參數來限制PGA的大小,而由Oracle內部的智能算法來自動進行PGA各種工作緩沖區的分配工作。當WORKAREA_SIZE_POLICY設置為AUTO,PGA自動管理就會起作用(這2個參數都可以動態修改)。
要注意的是,Oracle 9i R2版本,PGA_AGGREGATE_TARGET只能控制獨立服務器模式的服務進程的工作區域。共享服務器模式的連接還是由_Area_size來控制。Oracle 10g可以控制獨立服務器和共享服務器模式的所有工作區域。
一般情況下,如果使用裸設備,那么對于OLTP系統PGA_AGGREGATE_TARGET用以下公式來分配:
PGA_AGGREGATE_TARGET = ( 80%) 20%
對于OLAP系統,可以按照下面的公式計算:
PGA_AGGREGATE_TARGET = ( 80%) 50%
要注意的是,以上只是一個建議的參數設置,如果要知道你的系統中設置什么樣的值比較合理,建議通過STATSPACK報告來進行分析。具體的分析方法,請參照本章的相關章節。通過部分系統視圖也可以對PGA的使用情況進行分析,得到響應的優化建議。
通過V$PGASTAT視圖可以得到PGA的詳細情況:
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
主要指標的含義如下:
aggregate PGA auto target:Oracle可以用于PGA工作區的空間,一般比參數略小
total PGA used for auto workarea:系統實際使用的PGA空間。
maximum PGA used for auto workareas:上次數據庫啟動后PGA空間達到的最大值
total PGA in used:當前正在使用的PGA,可以從v$process的pga_used_mem字段中獲取
over allocation count:當PGA_AGGREGATE_TARGET值過低的時候,擴充的PGA空間。當這個值不是0的時候,大多數情況下應該增大該參數
以下指標在Oracle 9i Release 2以后的版本具有的指標:
over allocation count:如果PGA_AGGRAGATE_TARGET太小,動態擴展PGA空間的次數,如果系統的物理內存足夠,那么應該設置一個足夠大小的PGA_AGGRAGATE_TARGET,使該統計值為0
cache hit percentage:PGA工作區使用內存的百分比,如果內存足夠,那么這個值應該接近或者等于100%
V$SQL_WORKAREA_HISTOGRAM:該視圖中存放了PGA的使用情況,通過該視圖可以了解PGA工作區域的使用情況,下面的語句可以檢查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
這個視圖可以顯示各種工作區的使用情況,OPTIMAL_EXECUTIONS是不需要通過臨時表空間交換的操作的次數。ONEPASS_EXECUTIONS是需要進行一次臨時表空間交換的操作次數。MULTIPASSES_EXECUTIONS是需要多次臨時表空間交換的操作次數。原則上,如果100%的操作都是內存操作,是最佳的選擇。如果內存不足,某些大型操作是ONEPASS的,也是可以接受的。出現MULTIPASSES的操作會引起性能的急劇下降。
V$SQL_WORKAREA_ACTIVE
這個視圖顯示當前工作區的活動情況。小于64K的小型排序不會被統計。通過該視圖可以監控目前系統的工作區使用情況。比如:
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
以下是這些數據的含義:
SID:產生排序操作的SESSION ID
Operation:操作的類型
Esize:PGA管理器估計的本次操作需要的總內存數量(單位是KB)
MEM:目前正在使用的內存數量(單位是KB)
MAX MEM:該SESSION曾經使用的最大PGA內存數量(單位是KB)
PASS:0代表內存排序,1代表1-pass排序,M代表M-PASS排序
TSIZE:轉儲到臨時表空間的大小(單位是KB)
對于ORACLE 9I RELEASE 2版本以后的數據庫,提供了2個新的視圖:
V$PGA_TARGET_ADVICE:提供PGA使用的建議數據
V$PGA_TARGET_ADVICE_HISTOGRAM:PGA建議直方圖
對于一個正在運行的實際系統,通過這2個視圖,可以了解如何配置PGA_AGGREGATE_TARGET是比較合適的。要使用這2個視圖,首先要設置statistics_level為TYPICAL或者ALL,如果該參數設置為BASIC,那么這兩個視圖不會提供任何數據。V$PGA_TARGET_ADVICE視圖提供PGA_AGGREGATE_TARGATE和PGA命中率以及PGA OVERALLOC的數量。比如:
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
在設置PGA_AGGREGATE_TARGET的時候,盡量選擇物理內存可以支撐的,命中率比較高,并且ESTD_OVERALLOC_COUNT為0的建議值。在上面的例子里,PGA_AGGREGATE_TARGET取值的最小值是375,低于這個值,OVERALLOC是非零的。如果物理內存充足,設置為4000M或者更高可以提高PGA的性能。
V$PGA_TARGET_ADVICE_HISTOGRAM視圖提供PGA使用情況的直方圖情況。通過這個統計直方圖,可以了解系統中每個大小規模的區域的使用情況,如果某類較小的工作區域產生了M-PASS的操作,那么說明PGA的設置偏小。
和ORACLE 8i比較,Oracle 9i的工作區管理更加靈活。Oracle 9i提供動態工作區管理的能力。Oracle 8i下,分配的工作區域將不會歸還給操作系統,會導致Oracle對物理內存的過渡占用,嚴重的情況會導致系統產生換頁操作。Oracle 9i的工作區用完后會自動歸還,這樣減輕了數據庫服務程序對物理內存的占用。
注1:PGA_AGGREGATE_TARGET參數在OpenVms操作系統下無效。
注2:由于BUG問題,在HP-UX 11.0下,如果使用oracle 9.0.1版本,設置PGA_AGGREGATE_TARGET會導致操作系統宕機。
總結
以上是生活随笔為你收集整理的oracle dba_seg,Oracle DBA 应知应会 -- PGA自动管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle adg的特点是什么,Ora
- 下一篇: c语言类型名占字节,在C语言中,不同类型