ORACLE 10G中SGA,PGA內存分配對系統性能的影響

最近在學習PGA時有一點心得,特此記下,以備查.

ORACLE官方文檔對PGA解釋如下“areas used by memory-intensive SQL operators such as sort, group-by, hash-join, bitmap merge, and bitmap create。”很明顯PGA是用於SQL排序和哈希連接,位圖創建所用的內存區域,當排序空間超過100M或者PGA的 5%時,ORACLE會選擇在TEMP表空間繼續進行排序,所以理論上說PGA越大,數據庫性能應該越好,應該儘量增加該部分的空間大小,不過增加該部分空間可能會對SQL語句的執行計劃產生影響,所以在修改PGA時要經過測試確認.

對SGA修改時,並不是越大越好,當SGA過大時會導致library cache,dictionary cache命中率下降,從而對系統性能產生負面影響,PGA主要是排序操作,所以相對SGA來說過大的PGA並不會帶來多麼嚴重的性能下降,只會降低HASH JOIN的成本,從而使優化器更多的選擇使用HASH JOIN.

將PGA的管理交給ORACLE內存管理器是一個不錯的選擇,絕大多數據時候比手工設置各個值要好的多,只不過在ORACLE 9I共享服務器時無法使用PGA自動管理特性.

可以通過下面的SQL查詢來大致確認PGA是否夠用:

select name,value,unit from v$pgastat where name in('aggregate PGA target parameter','maximum PGA allocated');

當maximum PGA allocated相對於aggregate PGA target parameter過大時,則說明PGA偏小了,需要增加空間.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章