SGA:SystemGlobal?Area是OracleInstance的基本組成部分,在實例啟動時分配;系統全局域SGA主要由三部分構成:數據庫緩沖區、日志緩沖區、共享池,還可能包含:大池,JAVA池,流池。
注意點:前三者是必需的,后三者是可選的。
數據庫緩沖區:數據庫緩沖區是oracle用來執行SQL的區域,在更新數據時,用戶會話不直接更新磁盤上的數據,而是先寫到數據庫緩沖區中的塊,塊在緩沖區停留一段時間,當數據從緩沖區寫到數據文件后,有可能還會停留在緩沖區一段時間,只不過此時此塊不會被另一個塊重寫。
數據庫緩沖區的大小對性能有至關重要的影響,既不能過小也不能過大。一般不能少于百M,也很少有見過百G的。9i版本前需要重啟數據庫才能修改緩沖區大小,之后可以動態的調整數據庫緩沖區。10g版本后可以根據工作負荷自動調整大小。
日志緩沖區:用于短期存儲寫入到磁盤上的重做日志的變更向量的臨時區域,與其他內存區域相比,日志緩沖區較小,因為他是一個非常短暫的存儲區域。將變更向量插入其中,并幾乎實時的流向磁盤。日志緩沖區最多不必超過數MB,的確,如果將其設置大于默認值,就會對性能產生極壞的影響。大日志緩沖區就意味著:在發出commit語句時,要寫入的內容更多,在發出完成提交信息以及會話恢復工作以前,需要消耗更長的時間。
注:日志緩沖區的大小是固定不變的,在啟動實例時被設置為固定值,無法實現自動管理。
共享池:共享池是最復雜的SGA結構,分為許多子結構。主要包括:庫緩存、數據字典緩存、PL\SQL區、SQL查詢和PL\SQL函數結果緩存。共享池所有的結構都是自動管理的。
確定共享池最優容量,是一個性能調整問題,大多數數據庫都需要一個數百MB大小的共享池,到大于1GB也是可能的,但很少看到有小于100MB的共享池。
大池:大池是一個可選區,如果創建了大池,那些在不創建大池的情況下,使用共享池的內存的進程將自動使用大池。大池的大小跟性能無關,大池可以動態調整,自動管理。
Java池:只有當應用程序需要在數據庫中運行Java存取過程時,是才需要創建。Java池用作實例化Java對象所需的堆空間。但是很多oracle選項是用Java編寫,因此現將Java池視作標準。注意Java代碼不在此池緩存,而在共享池緩存。Java池最佳大小應該與應用程序相關。不能過大也不能過小。Java池的大小是動態調整,自動管理的。
PGA:ProcessGlobal?Area是為每個連接到Oracledatabase的用戶進程保留的內存。
oracle在運行,就是oracle的內存結構,比如放databuf,share pool,oracle啟動時分配,oracle關閉時回收.
PGA是有用戶連oracle時,oracle給開辟的一個內存區, 只供該用戶使用,該用戶斷開后,oracle就會將這塊內存回收
SGA由所有前臺跟后臺進程共享,PGA內存僅供分配到的前臺進程訪問,SGA和PGA都可實現自動管理。
閱讀(519) | 評論(0) | 轉發(0) |