1. 程式人生 > >Oracle體系結構之記憶體結構(SGA、PGA)

Oracle體系結構之記憶體結構(SGA、PGA)

跟其它的全域性區不同,Call Global Area是短暫性存在的.它只有在函式呼叫期間存在,一般是在對例項的最低級別的呼叫時才需要CGA,比如:分析一個SQL語句,執行一個SQL語句,取出一個SELECT語句的輸出

一個單獨的CGA在遞迴呼叫時是需要的.在SQL語句的分析過程中,對資料字典資訊的遞迴呼叫是需要的,因為要對SQL語句進行語法分析,還有在語句的優化期間要計算執行計劃.執行PL/SQL塊時在處理SQL語句的執行時也是需要遞迴呼叫的,在DML語句的執行時要處理觸發器執行也是需要遞迴呼叫的.

不管UGA是放在PGA中還是在SGA中,CGA都是PGA的一個子堆(Subheap).這個事實的一個重要推論是在一個呼叫的期間會話必須是一個程序.對於在一個MTS的Oracle資料庫程序應用開發時關於這一點的理解是很重要的.如果相應的呼叫較多,就得增加processes的數量以適應呼叫的增加. 

沒有CGA中的資料結構,CALLS是沒法工作的. 而實際上跟一次CALL相關的資料結構一般都是放在UGA中,如SQL AREA,PL/SQL AREA, SORT AREA, hash area, bitmap area它們都必須在UGA中, 因為它們要在各CALLS之間要一直存在並且可用. 而CGA中所包含的資料結構是要在一次CALL結束後能夠釋放的. 例如CGA包含了關於遞迴呼叫的資訊,直接I/O BUFFER等還有其它的一些臨時性的資料結構. 

5. 總結一下

PGA包括:
1)Fixed PGA
2)UGA (dedicated server),當系統是shared server時,UGA位於shared pool或者large pool。
3)CGA

而UGA和CGA都屬於Variable PGA(PGA heap)

UGA包括:

1)Fixed UGA
2)private SQL area
3)session memory
4)SQL Work Areas

private SQL area, session memory, SQL work ares都屬於variable UGA(UGA heap).

6. private SQL area
可以分為兩部分:
1)永久記憶體區域:存放相同SQL語句多次執行時都需要的一些遊標資訊,比如繫結變數等。這部分記憶體只有在遊標被關閉時才釋放。所以稱為:永久記憶體區域。

2)執行時區域:處理SQL語句時的第一步要建立執行時區域,這裡存放了當SQL執行時所使用的資訊。對於DML語句,SQL執行完畢就釋放該區域;對於select語句,當所有資料行返回給使用者時釋放。

7. session area
儲存該session的一些引數,比如:修改的NLS引數,修改的優化器引數optimizer_mode,alter session命令所啟用的跟蹤資訊,可以使用的roles,所開啟的db links,真正使用的package等。

8. SQL work area
SQL工作區是UGA中最重要的部分,佔UGA的大部分記憶體。主要是在排序sort(ordr by, group by),hash-join時使用。SQL工作區的大小對效能的影響很大。

一般大數量的排序,是不太可能完全在SQL work area中完成的,因為沒有那麼大的記憶體,所以一般都會使用臨時表空間,將排序的中間結果寫入到temp表空間中(磁碟排序)。根據SQL work area的大小,使用臨時表空間的次數可以是一次,也可能是多次。所以有三種情況:

1)optimal: 排序完全在記憶體中完成;
2)onepass: 排序完成,需要使用磁碟一次;
3)multipass: 排序的完成,需要使用磁碟多次;

optimal一般是不太現實的,我們一般儘量保證onepass,如果導致了multipass,則效能會下降很多。我們先來看看排序的過程:

排序演算法採用的是堆排序;排序方式是分批排序,比如10000條記錄排序,把它分成100次,每次對100條記錄排序;當100條排序完成之後,寫入到temp表空間;再對下100條排序,排序完之後在寫入到temp表空間;最後對temp表空間的100個區域性排序的佇列進行merge操作。從而完成對10000條記錄的排序。這樣是比較理想的情況,因為只對磁碟讀寫一次,屬於onepass。如果排序涉及到磁碟的多次讀寫,則屬於multipass。一般我們儘量調整sort_area_size的大小,來避免multipass排序。

SQL work area可以分為下面幾個部分:

排序區(sort_area_size),hash區(hash_area_size),bitmap區(create_bitmap_area_size,bitmap_merge_area_size)等,他們深刻的影響著排序、hash-join、bitmap等的效能。

9. PGA的自動管理
在Oracle9i之前,我們是通過設定sort_area_size, hash_area_size等引數來管理PGA。

SQL> show parameter area_size;

NAME                                 TYPE        VALUE

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

bitmap_merge_area_size               integer     1048576

create_bitmap_area_size              integer     8388608

hash_area_size                       integer     131072

sort_area_size                       integer     65536

workarea_size_policy                 string      AUTO

SQL> show parameter sort_area;

NAME                                 TYPE        VALUE

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

sort_area_retained_size              integer     0

sort_area_size                       integer     65536

SQL> select * from v$pgastat;

NAME                                          VALUE UNIT

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

aggregate PGA target parameter             71303168 bytes

aggregate PGA auto target                  27297792 bytes

global memory bound                        14260224 bytes

total PGA inuse                            40966144 bytes

total PGA allocated                        88008704 bytes

maximum PGA allocated                     125034496 bytes

total freeable PGA memory                   4259840 bytes

process count                                    23

max processes count                              40

PGA memory freed back to OS               492634112 bytes

total PGA used for auto workareas                 0 bytes

maximum PGA used for auto workareas         6105088 bytes

total PGA used for manual workareas               0 bytes

maximum PGA used for manual workareas             0 bytes

over allocation count                             0

bytes processed                          6275959808 bytes

extra bytes read/written                          0 bytes

cache hit percentage                            100 percent

recompute count (total)                       33814

19 rows selected.
maximum PGA allocated:PGA曾今達到的最大值

over allocation count: Over allocating PGA memory can happen if the value ofPGA_AGGREGATE_TARGET is too small. When this happens, the Oracle Database cannot honor the value of PGA_AGGREGATE_TARGET and extra PGA memory needs to be allocated. If over allocation occurs, then increase the value of PGA_AGGREGATE_TARGET using the information provided by the V$PGA_TARGET_ADVICE view.extra bytes read/written: Number of bytes processed during extra passes of the input data, cumulated since instance startup. When a work area cannot run optimal, one or more of these extra passes is performed. (即磁碟排序的讀寫磁碟的位元組數)

使用v$pga_target_advice來估測PGA的大小,即PGA的建議值(類似於v$sga_target_advice和SGA):
V$PGA_TARGET_ADVICE predicts how the cache hit percentage and over allocation count statistics displayed by the V$PGASTAT performance view would be impacted if the value of the PGA_AGGREGATE_TARGET parameter is changed. The prediction is performed for various values of the PGA_AGGREGATE_TARGET parameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.

SQL> select round(pga_target_for_estimate/(1024*1024)) target_size_M,  2  estd_pga_cache_hit_percentage est_cache_hit_percentage,  3  round(estd_extra_bytes_rw/(1024*1024)) est_extra_read_write_M,  4  estd_overalloc_count est_over_alloc from v$pga_target_advice;TARGET_SIZE_M EST_CACHE_HIT_PERCENTAGE EST_EXTRA_READ_WRITE_M EST_OVER_ALLOC------------------  ---------------------------   ---------------------- --------------           17                       97                    186             31           34                       97                    186             31           51                      100                      0              2           68                      100                      0              0           82                      100                      0              0           95                      100                      0              0          109                      100                      0              0          122                      100                      0              0          136                      100                      0              0          204                      100                      0              0          272                      100                      0              0          408                      100                      0              0          544                      100                      0              013 rows selected.使用v$pga_target_advice_histogram來估測PGA的大小(類似於v$sga_target_advice和SGA):

V$PGA_TARGET_ADVICE_HISTOGRAM predicts how statistics displayed by the V$SQL_WORKAREA_HISTOGRAM dynamic view would be impacted if the value of thePGA_AGGREGATE_TARGET parameter is changed. This prediction is performed for various values of the PGA_AGGREGATE_TARGET parameter, selected around its current value. The advice statistic is generated by simulating the past workload run by the instance.

該檢視可以通過對不同工作區大小的取樣評估提供統計資訊共分析使用SQL在工作區中以3種方式執行:

Optimal(優化方式):指所有處理可以在記憶體中完成;Onepass:大部分操作可以在記憶體中完成,但是需要使用到磁碟排序;Multipass:大量操作需要產生磁碟互動,效能極差。