天天看點

[轉]Linux伺服器性能評估與優化(三)

 2.oracle資料庫記憶體參數的優化

(1)系統核心參數

修改 /etc/sysctl.conf 這個檔案,加入以下的語句:

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.shmall = 2097152

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

參數依次為:

kernel.shmmax:共享記憶體段的最大尺寸(以位元組為機關)。

kernel.shmmni:系統中共享記憶體段的最大數量。

kernel.shmall:共享記憶體總量,以頁為機關。

fs.file-max:檔案句柄數,表示在linux系統中可以打開的檔案數量。

net.ipv4.ip_local_port_range:應用程式可使用的ipv4端口範圍。

需要注意的幾個問題

關于kernel.shmmax

     oracle sga 由共享記憶體組成,如果錯誤設定 shmmax可能會限制sga 的大小,shmmax設定不足可能會導緻以下問題:ora-27123:unable to attach to shared memory segment,如果該參數設定小于oracle sga設定,那麼sga就會被配置設定多個共享記憶體段。這在繁忙的系統中可能成為性能負擔,帶來系統問題。

     oracle建議kernel.shmmax最好大于sga,以讓oracle共享記憶體區sga在一個共享記憶體段中,進而提高性能。

關于kernel.shmall

     表示系統共享記憶體總大小,以頁為機關。

     一個32位的linux系統,8g的記憶體,可以設定kernel.shmall = 2097152,即為: 2097152*4k/1024/1024 = 8g就是說可用共享記憶體一共8g,這裡的4k是32位作業系統一頁的大小,即4096位元組。

關于kernel.shmmni

     表示系統中共享記憶體段的最大數量。系統預設是4096,一般無需修改,在sun os下還有kernel.shmmin參數,表示共享記憶體段最小尺寸,勿要混肴! 

(2)sga、pag參數的設定

a oracle在記憶體管理方面的改進

     oracle 9i通過參數pga_aggregate_target參數實作pga自動管理 oracle 10g通過參數sga_target參數實作了sga的自動管理,

     oracle 11g實作了資料庫所有記憶體塊的全自動化管理,使得動态管理sga和pga成為現實。

自動記憶體管理的兩個參數:

     memory_target:表示整個oracle執行個體所能使用的記憶體大小,包括pga和sga的整體大小,即這個參數是動态的,可以動态控制sga和pga的大小。

     memory_max_target:這個參數定義了memory_target最大可以達到而不用重新開機執行個體的值,如果沒有設定memory_max_target值,預設等于memory_target的值。

     使用動态記憶體管理時,sga_target和pga_aggregate_target代表它們各自記憶體區域的最小設定,要讓oracle完全控制記憶體管理,這兩個參數應該設定為0。

b oracle五種記憶體管理方式

Ø         自動記憶體管理,即amm (automatic memory management)

Ø         自動共享記憶體管理,即asmm(automatic shared memory management)

Ø         手動共享記憶體管理

Ø         自動pga管理

Ø         手動pga管理

自動記憶體管理(amm)

預設安裝oracle11g的執行個體就是amm方式。通過如下檢視:

示例如下:

sql> show parameters target 

name                                       type                  value

------------ ---------------------      ------------------    ---------------------- archive_lag_target                     integer                      0

db_flashback_retention_target   integer                    1860

fast_start_io_target                    integer                      0

fast_start_mttr_target                 integer                      0

memory_max_target                  big integer              1400m

memory_target                          big integer              1400m

pga_aggregate_target                big integer                0

sga_target                                  big integer                0

注意:如果初始化參數 lock_sga = true ,則 amm 是不可用的。

自動共享記憶體管理

自動共享記憶體管理是oracle10g引進的,如果要使用自動共享記憶體管理,隻需設定memory_target=0,然後顯式指定sga_target即可。

sql> alter system set memory_target=0 scope=both;

system altered.

sql> alter system set sga_target=1024m scope=both;

sql>

手工共享記憶體管理

oracle9i以及以前版本,隻能手工設定共享記憶體管理,如果要使用手動共享記憶體管理,首先需要設定sga_target 與 memory_target為0。

sga包含主要參數有:

share_pool_size:共享池大小,建議300-500m之間。

log_buffer:日志緩沖區大小,建議1-3m之間。

large_pool_size:大緩沖池大小,非mts系統,建議在20-30m之間。

java_pool_size:java池大小,沒有java應用時,建議10-20m之間。

db_cache_size:資料緩沖區大小,根據可使用記憶體大小,盡可能大。

自動pag管理

oracle9i版本引入了自動pga管理,如果使用的是amm管理方式,則無需擔心pga的配置,但是如果對對amm管理不放心的話,可以設定自動pga管理,設定

     workarea_size_policy = auto

然後指定pga_aggregate_target大小即可。,

手工pag管理

如果要做到精确的控制pga,還可以設定手動管理pga,設定

workarea_size_policy = manual

然後分别指定pga相關參數即可:

pga相關參數有:

sort_area_size

sort_area_retained_size,

3.oracle下磁盤存儲性能優化

①      選擇檔案系統存取資料

檔案系統的選擇

     單一檔案系統(ext2、ext3、xfs等)

     叢集檔案系統(gfs、ocfs2)

檔案系統存儲優缺點:

     優點:管理維護友善。

     缺點:資料讀寫要經過作業系統級的緩存,效率不是很高。

②      asm(automatic storage management)

asm優點:

     資料可直接讀寫,無需經過作業系統存取效率很高,讀寫效率與直接的原始裝置基本相同。

     oracle提供了專門的管理和維護工具

關于作者

 高俊峰,網名:南非螞蟻

ixpub “儲存設備與容災技術”及“ linux與開源世界”版主。

 喜歡oracle和 unix/linux技術,平時主要活動在itpub.net﹑ixpub.net﹑chinaunix.net等大型技術社群,一直緻力與oracle資料庫﹑unix/linux作業系統管理﹑優化領域,現在主要從事oracle資料庫管理和項目規劃設計工作,擅長oracle資料庫的備份恢複,性能調優,對unix/linux叢集應用也有一定的研究。

轉自:http://www.517sou.net/article/104.aspx

繼續閱讀