淺說Oracle PGA空間管理

realkid4發表於2011-10-08

 

Oracle例項是Oracle Server的重要組成部分,理論上包括一塊共享記憶體(Shared Memory)和一系列後臺程式(Background Process)。遠端Remote客戶端透過在伺服器端的代理Server ProcessOracle 例項進行通訊互動。在每一個Server Process上,都對應一塊私有的記憶體空間,我們稱之為Private Global Area(簡稱為PGA)空間。本篇中,我們就簡單介紹一下PGA的組成和管理細節。

 

1PGA組成和功能

 

PGAServer Process對應的私有空間,其中儲存的都是與會話相關的資料和相關資訊。PGA中,主要包括全域性變數、資料結構和控制資訊。比如我們常說的Session Cursor,就是在執行一個SQL的時候生成在PGA空間中,與SGAShared Cursor對應的SQL執行體。

 

在空間使用上,session cursor使用的PGA比較少。很多時候,Oracle的效能好壞是與PGA大小配置密切相關。在執行一些長時間執行、操作結果集合很大的SQL時,Oracle是會將處理的資料集和中間結果集合轉移到Server Process的私有空間——PGA中進行處理。在筆者過去的一些文章中,也介紹過HashGroup bySort等操作對PGA的空間使用情況。在Oracle中,對PGA中這樣的空間稱之為Work Area

 

 

Work Area的大小設定是和Oracle效能密切相關。在Work Area的具體組成上,有幾個比較需要關注的部分:hash_areasort_areabitmap_area

 

 

SQL> show parameter hash_area

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

hash_area_size                       integer     131072

 

SQL> show parameter sort_area

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

sort_area_retained_size              integer     0

sort_area_size                       integer     65536

 

SQL> show parameter bitmap

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

bitmap_merge_area_size               integer     1048576

create_bitmap_area_size              integer     8388608

 

 

其中,hash_areaOracleSQL進行連線操作(主要是hash join)時,將進行hash函式計算過的bucket集合進行儲存的位置。而sort_area表示SQL中進行order by等聚集操作的結果集合場所。

 

通常情況下,我們都希望SQL執行所需要的中間結果在Work Area的特定區域中可以容納。因為PGA對應的是記憶體區域,進行資料處理和儲存的速度要遠快於磁碟處理速度。當SQL執行所需要的空間小於work area時候,SQL執行的速度就會很快。但是如果SQL需要空間大於Work Area時,Oracle就會使用Temp表空間的空間進行“置換”操作。這個過程要涉及到比較複雜的計算和儲存過程,所以一旦出現這樣的“multi-pass”過程,SQL執行的效率通常是較低,響應時間也隨之增加。

 

 

2PGA空間管理

 

由於PGA各個組成部分,特別是work_areaSQL執行效率的影響,所以各部分的tunning是早期Oracle DBA一個比較頭疼的問題。

 

Oracle 8i以及以前,DBA需要對系統的PGA進行仔細的調節,評估整個應用系統最佳使用情況。調節的方法主要是對Oracle初始化引數的調節,主要有sore_area_sizehash_area_sizebitmap_merge_area_sizecreate_bitmap_area_size等。

 

進入Oracle 9i後,一場持續Oracle多個版本的革命開始,Oracle開始提供一種自動調節PGA的功能。DBA只需要指定一個初始化引數pga_aggregate_target,作為從資料庫伺服器角度希望分配給所有Server ProcessPGA總和大小。

 

 

SQL> show parameter pga

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target                 big integer 194M

 

 

一旦設定了pga_aggregate_target引數,就意味著規定Oracle例項在分配給所有Server process PGA空間的時候,總分配量不要超過這個引數值。但是注意,這個引數是一個target,有一些情況下,Oracle分配的Server process PGA總和是會超過這個target值的。但是總的來說,Oracle在調整時會盡量圍繞這個規劃值進行調整。

 

此外,要開啟自動的SQL執行空間管理,還要設定workarea_size_policy初始化引數。

 

 

SQL> show parameter workarea

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

workarea_size_policy                 string      AUTO

 

 

當該引數被設定為auto之後,和pga_aggregate_target結合使用就起到了自動調節PGA的作用。與該auto取值對應的workarea_size_policy取值為manual,也就是過去一直使用的手工調整方法。

 

針對不同的資料庫例項情況,主要是應用負載和應用併發Server Process,可以說每個例項調整值都是不同的,都存在各自獨特的最優值。從9iR2開始,Oracle同時推出了Advisor元件功能,對一些如buffer_cachePGA等提出了最最佳化建議,最為DBA進行實際設定時候的重要參考。

 

 

3、歷代OraclePGA設定變化

 

Oracle 9i開始,PGA自動配置調整就成為Oracle PGA設定的一種主要方式。DBA不再過多關注PGA內部各個區劃分的大小問題,而是隻需要站在Database Server角度,看分配給所有PGA的記憶體空間大小就可以了。各個分割槽大小都是透過Oracle自適應的過程進行調節。

 

 

注意,在9iR2中,自動進行PGA空間調節的功能只針對獨佔連線模式(Dedicated Server Connections),對於共享連線模式(Shared Connections)來說不其效果。

 

到了10g,上面的限制被打破,自動PGA管理調節支援所有種類的連線模式。11g之後,經歷兩個版本成熟過程的Oracle將自動儲存管理(Automatic Memory Management AMM)擴充覆蓋了SGAPGA。也就是說,DBA只要設定一個Memory_Target引數,指定Oracle Database Server一共需要使用多少的記憶體資源,剩下的分配和調節都是交給Oracle去進行。

 

不過,在11g環境下,官方推介還是對引數pga_aggregate_target設定一個較小的取值,用來保證最小的PGA總分配量。在使用Memory_Target的情況下,Oracle會依據負載和併發Server的情況將空間在PGASGA進行分配,很多情況下有可能出現SGA延展過大的情況,所以設定一個較小的pge取值,可以保證系統正常執行。

 

4、結論

 

Oracle PGA是例項的一個重要部分,也是我們進行調優和內部結構研究的重要組成。從Oracle 9i開始推行的AMM,很大程度上減輕了DBA的監控和調整壓力,使Oracle資料庫開始進入自適應調優時代。

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-708788/,如需轉載,請註明出處,否則將追究法律責任。

相關文章