深入淺出sga和pga章節記載-01

dotaddjj發表於2011-11-29

今早重新又翻看了eygle的深入淺出的關於sgapga的章節,對於sgapga如何設定可以說一直沒有什麼定性的標準,這裡先說一下關於自動管sgapga管理中參考的兩個檢視v$sga_target_advicev$pga_target_advice

SQL> desc v$sga_target_advice;

Name Type Nullable Default Comments

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

SGA_SIZE NUMBER Y

SGA_SIZE_FACTOR NUMBER Y 此表中的sga_size和當前parametersga大小比值

ESTD_DB_TIME NUMBER Y

ESTD_DB_TIME_FACTOR NUMBER Y

ESTD_PHYSICAL_READS NUMBER Y 在該sga_size引數下估計的物理讀次數

SQL> desc v$pga_target_advice;

Name Type Nullable Default Comments

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

PGA_TARGET_FOR_ESTIMATE NUMBER Y

PGA_TARGET_FACTOR NUMBER Y

ADVICE_STATUS VARCHAR2(3) Y advice是否可採用on/off,取決於staitiscs_level

BYTES_PROCESSED NUMBER Y 所有程式佔用的資源bytes

ESTD_EXTRA_BYTES_RW NUMBER Y 被估計用於讀和寫的資源佔用

ESTD_PGA_CACHE_HIT_PERCENTAGE NUMBER Y 估計的命中率

ESTD_OVERALLOC_COUNT NUMBER Y 此引數非0則表示pga設定不足夠大

我們完全可以根據上述檢視的幾個列來設定sgapga的大小,例如根據v$sga_target_advice檢視的estd_physical_readssga_size來檢視sga的變化帶來的物理讀次數的變化,或者根據v$pga_target_advice檢視的estd_pga_cache_hit_percentagepga_target_for_estimate引數,隨著pga的變化帶來的命中率的變化而設定一個合理的數值。

根據oracle的建議,oracle最多可以使用80%實體記憶體,其餘20%os,在80%的記憶體中,對於OLTP系統分配20%pga80%sga,對於DSS系統,則可以分別分配50%pgasga使用,當然需要參考系統的具體業務情況,做awrstatspack統計系統的執行資訊設定合理的引數!

隨便提一下:有網友經常提到資料庫例項都有個誤解的說法,就是資料庫起不來說是例項起不來,例項只是資料庫訪問的一種方式,從結構上說就是sgaoracle後臺程式。

SQL> show sga

Total System Global Area 419430400 bytes

Fixed Size 1249320 bytes

Variable Size 83890136 bytes

Database Buffers 327155712 bytes

Redo Buffers 7135232 bytes

固定sga

記得以前看官方文件時,sga中的固定部分的fixed size始終不理解具體是個什麼,而eygle深入淺出中理解為資料庫和例項的狀態等通用資訊,後臺程式需要經常訪問這些資訊。

Linux等平臺shmmax核心引數:

記得前些天在linux上安裝oracle時,設定了一個核心引數shmmax,該引數存在於linux/unix作業系統內,shmmax核心引數定義式系統允許的單個共享記憶體段最大值,可以試想如果sga大於shmmaxsga會建立分配於多個共享記憶體段,當然系統中最好將sga分配在一個共享記憶體中。

共享記憶體沒有釋放:後臺程式或者sga設定過大

前些天pub的網友的一個帖子中說到資料庫無法啟動nomountnomount階段oracle資料庫需要的spfile檔案,這個既然可以保證,那麼就可能是記憶體方面無法分配了,可能由於sga設定過大,超過實體記憶體無法啟動,還有可能是資料庫異常關閉,後臺程式未正常退出,共享記憶體也就沒有及時釋放引起,推過ipcs找出共享記憶體段shared memory id然後ipcrm強制釋放即可!

兩個引數statistics_leveldb_cache_advice

oracle 9I前調整sga的各個元件的大小都需要重新啟動資料庫,oracle 9I後可以動態調整sga的各元件的大小,這裡還是列出檢視v$db_cache_advicev$shared_pool_advice,其中跟此檢視相關的有兩個引數db_cache_advicestatistics_level ,其中的db_cache_advice跟檢視v$db_cache_advice相關,預設值為on為開啟建議並且消耗cpu和記憶體,off為關閉建議不為建議分配記憶體,ready為關閉建議但保留分配的記憶體。(這裡eygel提到了:可能在某些版本中由offon時出現ora-4031,無法從共享池中分配記憶體,不過在10g的自動sga管理中可能很難看見了)

另一個引數statistics_level控制資料庫收集統計資訊級別,預設的為typical收集大部分統計資訊,而all則為收集全部統計資訊,basic則為收集基本統計資訊。

Asmm下的調整資訊保留和mman程式:

oracle 10Gasmm自動管理sga下,我們很少去關心sga的各元件的具體設定,而只需要設定一個sga_target引數讓其自動管理即可,即使重啟資料庫oracle也會記錄上次啟動的sga的各元件具體資訊在spfile,下次啟動資料庫時不會丟失之前的調整結果(其實關於asmmsga的資訊的db下次啟動的保留oracle concept中也提到了,所以有些知識和細節是需要反覆閱讀和探究才會發覺和熟悉的!)這裡順便提一下一個後臺程式是在asmm管理模式下的mman程式,此程式用於自動管理調整sga各元件大小,而調整的依據還是收集的統計資訊建議,該程式可以在v$processes檢視或者alert.log中均可以發現。

V$sga_dynamic_componentoracle 10Gasmm下,增加的檢視v$sga_dynamice_component,其中記載了各動態元件的當前大小current_size和最近一次的調整時間last_oper_time和調整型別last_oper_type

[@more@]

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

相關文章