設定SGA的原則以及修改它的大小

liuhaimiao發表於2017-11-23

一,設定SGA的原則:

有時候會碰到在配置SGA中出現了問題,由於分配的記憶體過多,資料庫啟不起來了。


而且還要注意,在WINDOWS平臺下,32位的作業系統,SGA分配不能超過1.8G,64位的扛得住一些,所以我的資料庫伺服器換成64位的WINDOWS2003了。

記憶體結構=SGA(系統全域性區)+PGA(程式全域性區) 

SGA:是用於儲存資料庫資訊的記憶體區,該資訊為資料庫程式所共享。它包含Oracle 伺服器的資料和控制資訊,它是在Oracle伺服器所駐留的計算機的實際記憶體中得以分配,如果實際記憶體不夠再往虛擬記憶體中寫 

我們重點就是設定SGA,理論上SGA可佔OS系統實體記憶體的1/2——1/3 

原則:SGA+PGA+OS使用記憶體 <總物理RAM 

SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB 

1、SGA系統全域性區.(包括以下五個區) 

A、資料緩衝區:(db_block_buffers)儲存由磁碟資料檔案讀入的資料。 

大小: db_block_buffers*db_block_size 

Oracle9i設定資料緩衝區為:Db_cache_size 

原則:SGA中主要設定物件,一般為可用記憶體40%。 

B、共享池:(shared_pool_size):資料字典,sql緩衝,pl/sql語法分析.加大可提速度。 

原則:SGA中主要設定物件,一般為可用記憶體10% 

C、日誌緩衝區:(log_buffer)儲存資料庫的修改資訊. 

原則:128K ---- 1M 之間,不應該太大 

D 、JAVA池(Java_pool_size)主要用於JAVA語言的開發. 

原則:若不使用java,原則上不能小於20M,給30M通常就夠了 

E、 大池(Large_pool_size) 如果不設定MTS,主要用於資料庫備份恢復管理器RMAN。 

原則:若不使用MTS,5---- 10M 之間,不應該太大 

SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size 

原則: 達到可用記憶體的55-58%就可以了. 

2、PGA程式全域性區 

PGA:包含單個伺服器程式或單個後臺程式的資料和控制資訊,與幾個程式共享的SGA 正相反PGA 是隻被一個程式使用的區域,PGA 在建立程式時分配在終止程式時回收. 

A、Sort_area_size 用於排序所佔記憶體 

B、Hash_area_size 用於雜湊聯接,點陣圖索引 

這兩個引數在非MTS下都是屬於PGA ,不屬於SGA,是為每個session單獨分配的,在我們的伺服器上除了OS + SGA,一定要考慮這兩部分 

原則:OS 使用記憶體+SGA+併發執行程式數*(sort_area_size+hash_ara_size+2M) < 0.7*總記憶體 

例項配置 

一:實體記憶體多大 

二:作業系統估計需要使用多少記憶體 

三:資料庫是使用檔案系統還是裸裝置 

四:有多少併發連線 

五:應用是OLTP 型別還是OLAP 型別 

基本掌握的原則是, db_block_buffer 通常可以儘可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了 

例如: 

記憶體2G 單個CPU db_block_size 是8192 bytes 

SGA=0.55*2048M=1126.4M左右 

建議 shared_pool_size = 200M , db_block_buffer *db_block_size = 800M 

具體: shared_pool_size=209715200 #200M 

db_block_buffer=103192 #800M 

log_buffer = 131072 # 128k (128K*CPU個數) 

large_pool_size= 31457280 #30M 

java_pool_size = 20971520 # 20 M 

sort_area_size = 524288 # 512k (65k--2M) 

sort_area_retained_size = 524288 # MTS 時 sort_area_retained_size = sort_area_size


二,修改SGA的大小:


1.sga_target不能大於sga_max_size,可以設定為相等。
                      2.SGA
加上PGA等其他程式佔用的記憶體總數必須小於作業系統的實體記憶體。
做如下操作前,必須備份dbs目錄下的所有檔案。
方法一:直接SQL命令列修改:
SQL>alter system set sga_target=1024m scope=spfile;
SQL>alter system set sga_max_size=1024m scope=spfile;
(
如果spfile檔案不存在,需先建立createspfile from pfile;
alter system set sga_target=12g scope=spfile;
alter system set sga_max_size=12g scope=spfile;

然後
SQL>shutdown immediate
SQL>startup
SQL>show sga;   
即可看到SGA的大小已經被修改

方法二:透過EM修改:
SYS登陸到EM:管理->(資料庫配置)所有初始化引數—>SPFile>
               
在此介面可以直接定義sga_targetsga_max_size
然後重啟資料庫即可!

文章出處:

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

相關文章