1 概述 Oracle SGA區(qū)的監(jiān)控和管理,,是數(shù)據(jù)庫日常維護(hù)的重要內(nèi)容。本文詳細(xì)介紹SGA的基本概念,,SGA運行情況檢查,,以及SGA的參數(shù)設(shè)置原則,希望對大家的有所幫助,。 2 SGA的基本概念 當(dāng)啟動Oracle數(shù)據(jù)庫時,,系統(tǒng)會先在內(nèi)存內(nèi)規(guī)劃一個固定區(qū)域,用來儲存用戶需要的數(shù)據(jù),,以及Oracle運行時必備的系統(tǒng)信息,。我們稱此區(qū)域為系統(tǒng)全局區(qū)(System Global Area),簡稱SGA,。 SGA 包含數(shù)個重要區(qū)域,,分別是: ■ Database Buffer Cache (數(shù)據(jù)庫緩沖區(qū)) ■ Redo Log Buffer (重做日志緩沖區(qū)) ■ Shared Pool (共享區(qū)) ■ 其它,如Java pool,, Large pool 2.1 Database Buffer Cache (數(shù)據(jù)庫緩沖區(qū)) 數(shù)據(jù)庫緩沖區(qū)的作用主要是在內(nèi)存中緩存從數(shù)據(jù)庫中讀取的數(shù)據(jù)塊,。數(shù)據(jù)庫緩沖區(qū)越大,為用戶已經(jīng)在內(nèi)存里的共享數(shù)據(jù)提供的內(nèi)存就越大,,這樣可以減少所需要的磁盤物理讀,。 在9i以前數(shù)據(jù)庫緩沖區(qū)的大小是由db_block_buffers*db_block_size 來決定大小的,。db_block_size參數(shù)是在創(chuàng)建數(shù)據(jù)庫時設(shè)置的,,OLTP系統(tǒng)的db_block_size一般設(shè)置為8k。 在9i中,,數(shù)據(jù)庫緩沖區(qū)的大小由db_cache_size決定,,8i中的db_block_buffers被取消。db_cache_size的單位是字節(jié),,它直接決定了數(shù)據(jù)庫緩沖區(qū)的大小,,而不再是塊的數(shù)量。 2.2 Shared Pool (共享區(qū)) 共享區(qū)由三部分組成,,分別是Dictionary cache(包括數(shù)據(jù)字典的定義,,如表結(jié)構(gòu),、權(quán)限等),Library cache(包括共享的sql游標(biāo),,sql原代碼以及執(zhí)行計劃,、存儲過程和會話信息)和Control structure。它的大小由初始化參數(shù)shared_pool_size控制,,它的作用是緩存已經(jīng)被解析過的SQL,,使其能被重用,不用再解析,。SQL的解析非常消耗CPU的資源,,如果一條SQL在Shared pool中已經(jīng)存在,則進(jìn)行的僅是軟解析(在Shared pool中尋找相同SQL),,這將大大提高數(shù)據(jù)庫的運行效率,。當(dāng)然,這部分內(nèi)存也并非越大越好,,太大的Shared pool,,oracle為了維護(hù)共享結(jié)構(gòu),將付出更大的管理開銷,。建議在150M-500M之間,。如果系統(tǒng)內(nèi)存為1G,該值可設(shè)為150M-200M;如果為2G,,該值設(shè)為250M-300M;每增加1G內(nèi)存,,該值增加100M;但該值最大不應(yīng)超過500M。 2.3 Redo Log Buffer (重做日志緩沖區(qū)) Log_buffer是重做日志緩沖區(qū),,對數(shù)據(jù)庫的任何修改都按順序被記錄在該緩沖,,然后由LGWR 進(jìn)程將它寫入磁盤。LGWR的寫入條件是:用戶提交,、有1/3 重做日志緩沖區(qū)未被寫入磁盤,、有大于1M 重做日志緩沖區(qū)未被寫入磁盤、超時,、DBWR需要寫入的數(shù)據(jù)的SCN 號大于LGWR 記錄的SCN 號,,DBWR 觸發(fā)LGWR寫入。 從中可以看出,,大于1M的log buffer值意義并不大,。重做日志緩沖區(qū)的大小由初始化參數(shù)log_buffer設(shè)定。
文章轉(zhuǎn)載自網(wǎng)管網(wǎng):http://www./pdb/oracle/200904/160360.html 2.4 Large pool和Java pool
Large pool:用于MTS,、并行查詢和RMAN,。如果使用了MTS或RMAN,large_pool特別有用,,它可以降低用戶對share pool的爭用,。
如果應(yīng)用系統(tǒng)不使用MTS,,也不使用RMAN,large_pool_size的大小可設(shè)為1M,。
Java pool:Oracle8I以后,,oracle數(shù)據(jù)庫內(nèi)置了對java的支持,如果數(shù)據(jù)庫安裝時選擇了JServer組件,,則這個值可以設(shè)置為20M-30M之間,。可以查詢v$option動態(tài)視圖,,如果java那一項值為true,,則表示安裝了JServer,為false,,表示未安裝,。
如果應(yīng)用系統(tǒng)不使用PORTAL,APPS,,也不使用RMAN,,Java pool值的大小可設(shè)為1M。如果系統(tǒng)需要安裝補(bǔ)丁,,建議先把Java pool值的大小臨時增加到50-150M,。
3 SGA運行情況檢查
3.1 SGA整體檢查
對于SGA部分,我們通過sqlplus查詢:
SQL> show sga
Total System Global Area 316899848 bytes Fixed Size 741896 bytes
Variable Size 150994944 bytes
Database Buffers 163840000 bytes
Redo Buffers 1323008 bytes
或者 SQL> select * from v$sga;
NAME VALUE -------------------- ----------
Fixed Size 741896
Variable Size 150994944
Database Buffers 163840000
Redo Buffers 1323008
Show sga的結(jié)果和SGA的初始化參數(shù)配置并不是完全一一對應(yīng)的,,下面是每一個部分的具體解釋: Fixed Size
oracle 的不同平臺和不同版本下可能不一樣,,但對于確定環(huán)境是一個固定的值,里面存儲了SGA各部分組件的信息,,可以看作引導(dǎo)建立SGA的區(qū)域,。
Variable Size
包含了shared_pool_size、java_pool_size,、large_pool_size等內(nèi)存設(shè)置和用于管理數(shù)據(jù)緩沖區(qū)等內(nèi)存結(jié)構(gòu)的hash table,、塊頭信息等。
文章轉(zhuǎn)載自網(wǎng)管網(wǎng):http://www./pdb/oracle/200904/160360_2.html
Database Buffers
指數(shù)據(jù)緩沖區(qū),,在8i中包含default pool,、buffer_pool_keep、buffer_pool_recycle三部分內(nèi)存,。在9i中包含db_cache_size,、db_keep_cache_size,、db_recycle_cache_size,、db_nk_cache_size。這里要注意在8i中三部分內(nèi)存總和為db_block_buffers*db_block_size,。
Redo Buffers
指重做日志緩沖區(qū)的實際大小,,和log_buffer的值可能稍有不同,。
3.2 Data buffer 命中率檢查
檢查語句:
SQL>select 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"
from v$sysstat cur, v$sysstat con,, v$sysstat phy where cur.name = 'db block gets' and con.name = 'consistent gets'
and phy.name = 'physical reads';
調(diào)整原則: 命中率不應(yīng)該低于90%.
如果該值過低,,應(yīng)該調(diào)高初始化參數(shù)。8i調(diào)整db_block_buffer,,9i調(diào)整db_cache_size,。
3.3 Dictionary cache命中率檢查
檢查語句:
SQL>SELECT 1 - (SUM(getmisses)/SUM(gets)) "Data Dictionary Hit Ratio" FROM v$rowcache;
調(diào)整原則: 命中率不應(yīng)該低于95%.
如果該值過低,應(yīng)調(diào)高shared_pool_size的大小,。
3.4 Library cache命中率檢查
檢查語句:
SQL>SELECT 1-(SUM(reloads)/SUM(pins)) "Library cache Hit Ratio" FROM v$librarycache;
調(diào)整原則: 命中率不應(yīng)該低于99%.
如果該值過低,,應(yīng)調(diào)高shared_pool_size的大小。
3.5 Log buffer命中率檢查
檢查語句:
命中率不應(yīng)該高于1. 如果該值過高,,應(yīng)調(diào)高log_buffer的大小。 4 SGA 的參數(shù)設(shè)置原則 在 Oracle8i 時,,SGA 的大小是由初始化參數(shù)文件內(nèi)的某些參數(shù)所設(shè)定,,最麻煩的是每次調(diào)整參數(shù)之后必須等重新激活數(shù)據(jù)庫才生效。從Oracle9i 開始,,DBA 可以動態(tài)配置內(nèi)存的大小;這樣的技術(shù)我們稱為「dynamicSGA」,。有了dynamic SGA ,SGA的各組成區(qū)域都可以動態(tài)地進(jìn)行規(guī)劃與調(diào)整,,而不需先關(guān)閉數(shù)據(jù)庫,。 在Oracle9i中,SGA_MAX_SIZE可設(shè)定 SGA 所占用的最大內(nèi)存空間,。需要注意的是:SGA_MAX_SIZE 盡量不要超過物理內(nèi)存大小,,否則將會使用到硬盤上的虛擬內(nèi)存,反而導(dǎo)致性能低下,。如果 SGA_MAX_SIZE 之設(shè)定值小于其它 SGA 相關(guān)參數(shù)設(shè)定值的總和,,或是小于各相關(guān)參數(shù)默認(rèn)值的總和,則 SGA_MAX_SIZE 之設(shè)定值無效,。 在SGA的基本概念部分,,已經(jīng)介紹了各個部分大小設(shè)置的原則,這里再用一句話來總結(jié): 1)數(shù)據(jù)庫緩沖區(qū)建議占物理內(nèi)存的20%-30%,。物理內(nèi)存在1G以內(nèi),,可以占20%,1G-2G之間可占25%,,物理內(nèi)存在2G以上,,可以占30%,甚至更高,。 2)共享區(qū)建議在150M-500M之間,。如果系統(tǒng)內(nèi)存為1G,,該值可設(shè)為150M-200M;如果為2G,該值設(shè)為250M-300M;每增加1G內(nèi)存,,該值增加100M;但該值最大不應(yīng)超過500M,。 3)重做日志緩沖區(qū)建議設(shè)為1M。 4)如果應(yīng)用系統(tǒng)不使用MTS,,也不使用RMAN,,Large pool的大小可設(shè)為1M。否則設(shè)為16M,。 5)如果應(yīng)用系統(tǒng)不使用RMAN,,Java pool值的大小可設(shè)為1M。否則設(shè)為50M,。如果系統(tǒng)需要安裝補(bǔ)丁,,建議先把Java pool值的大小臨時增加到50-150M。 調(diào)整完上述參數(shù)后,,一定要計算SGA的尺寸,,總原則是SGA的尺寸應(yīng)小于物理內(nèi)存的一半。SGA的計算方法如下:SGA=DB_BLOCK_BUFFERS*DB_BLOCK_SIZE+SHARED_POOL_SIZE+LOG_BUFFER,。同時還要保證(SGA+sort_area_size*sesson數(shù)量)不大于物理內(nèi)存的70%,。 |
|