2020年8月12日 星期三

4.2 自動化記憶體管理

自 Oracle 10g 開始,推出了新功能 Automatic Shared Memory Management (ASMM),此功能目的是讓系統自動管理 SGA,在 Oracle 10g 以前必須自行設定 SGA 中各個 Pool 的大小,對於 DBA 來說,各個 Pool 要如何設定才能符合資料庫需求是一大難題,而現在只需告訴資料庫一個 SGA 整體大小,設定 sga_max_size 與 sga_target,裡面各 Pool 的大小由系統依需求自動調配,如此一來便減輕了 DBA 在管理上的負擔。


sga_max_size 這個參數是用來設定資料庫能使用到最大的 SGA size,而 sga_target 則是設定目前資料庫所使用的 SGA size,例如  sga_max_size = 4G、sga_target = 2G,表示資料庫能使用的 SGA 最大到 4G,而目前使用量在 2G,要增加  SGA 的使用量可以將 sga_target 增加,但不能超過 sga_max_size。sga_target 參數是可以在線上動態調整,而  sga_max_size 調整需將資料庫重新啟動後才會生效,設定完兩參數之後,資料庫系統會藉由 MMAN (Memory Manager  Process) 這個 background process 來自動分配 SGA 裡面各 Pool 的大小。


例如一個 OLTP 系統,白天以交易為主,線上使用者較多,因此分配較多的 Buffer Cache,而到了晚上以批次為主,像是資料庫備份等作業,此時就分配較多的 Large Pool 供資料庫使用。


到了 Oracle 11g 再針對記憶體自動管理功能做了強化,推出了 AMM (Automatic Memory Management),除了將 SGA 各 Pool 做自動分配外,也將 PGA 納入了記憶體自動分配的一部分。

此時需設定參數 memory_max_target -- SGA+PGA 所能達到的最大值,以及 memory_target -- 目前資料庫所使用的 SGA+PGA size,memory_target 可以線上修改數值 ,而memory_max_target 的修改必須將資料庫重新啟動後才會生效。AMM 同樣的也是透過 MMAN 將 SGA 與 PGA 進行自動調整。


例如白天較多的使用者進行查詢的動作,資料庫需分配較多的 Buffer Cache,晚上進行備份作業,需要較多的 Large Pool,此時使用者變少了,就有可能挪用部分 PGA 的空間給 SGA 使用。


memory_target 預設會將設定值的 60% 做為 SGA,另外 40% 做為 PGA,若以 DBCA 新建資料庫,預設會將作業系統的 40% 記憶體設定為 memory_target。若是要改變 memory_target 預設對於 SGA 與 PGA 的分佈,可以在設定 memory_target 之外,再設定 sga_target,此時設定的是 SGA 最小值,例如 memory_target 設定為 4G,同時 sga_target 設為 3G,表示整體 SGA+PGA 的大小為 4G,資料庫可在這個範圍內進行調配,但 SGA 最小需維持在 3G 的水準以上。同樣的道理 ,若設定了 memory_target (sga_target) 之外,再設定 shared_pool_size、db_cache_size 等參數,表示各 Pool 在動態調整的過程中,不可低於 shared_pool_size、db_cache_size 所設定的最小值。在此需特別注意的是,所有 SGA 的 Pool 中,唯獨 Log Buffer 不屬於 AMM 或 ASMM 動態調整的一部分。


DBA 只要設定了 memory_taget,就啟用了 AMM 功能,若是不想使用 AMM,則將 memory_target 設為 0 即可,不論 DBA 使用 memory_target 或是 sga_target 進行記憶體管理,都建議將各 Pool 設定最小值,尤其是 Shared Pool 與 Buffer Cache 。最小值的設定可以使用當前資料庫所分配的數值來當作基準,於 SQL*PLUS 中執行 “create pfile from spfile” 建立 pfile , 可於 pfile 中看到目前資料庫所分配各 Pool 的數值:

 

 <Instance_name>._ 所開頭的參數表示當前資料庫自動調配的數值,DBA 可以以此為基準將各 Pool 的最小值設定上去,目的是為了避免記憶體在自動調整的過程中,造成 Pool 過度收縮而導致系統異常。

沒有留言:

張貼留言