SGA(system global area)系統全局區域,在內存中分配一份共享內存區域為oracle的一些關聯進程運行所共享。如DBWn,PMON。
SGA分為有以下幾部分組成:
1.高速緩存區
2.重做日志緩存區
3.共享池
4.大池
5.java池
6.流池
7.固定SGA
高速緩存區
高速緩存區的主要作用於緩存從數據文件中讀取的數據塊。當用戶請求數據時,oracle會從高速緩存區中檢索,如果檢索到了對應的數據塊即緩存命中,oracle便會直接從緩存區中讀取數據。如果沒有命中,oracle的讀進程會從數據文件中讀取對應的數據塊,將對應的數據塊加入到緩存區中。oracle中緩存區中對應塊存在未使用,干凈和臟塊這三種狀態。未使用是指對應的區域沒有緩存任何數據,干凈狀態是指區域中緩存中數據和數據文件中的數據一致狀態,臟狀態指定是緩存區緩存的數據已被修改和數據文件中的數據不一致。oracle從數據文件中讀取的數據塊置換的是處於干凈狀態和未使用狀態的緩存中區域。
oracle會在特定是時間點會將高速緩存區中的臟數據和冷端中數據同步到數據文件中。oracle利用的是LRU(最近最少)原則來區分是該數據塊處於冷端還是熱端中。觸發DBWn同步數據文件的條件:
1.緩存區中處於干凈狀態或者未使用狀態中的區域低於某一個閾值的時候。
2.需要推進一個檢查點。如做切換日志以及ALTER SYSTEM CHECKPOINT命令
3.數據表空間處於readonly,offline
在緩存區中oracle利用LRU的原則來辨別數據塊處於冷端還是熱端。使用訪問觸摸器來記錄這個區域數據的訪問次數,來區別這個數據是出於冷端還是熱端。緩存區中的值的數據塊可以處於訂住狀態,以便用戶的再次訪問。訂住狀態的實現也是通過訪問觸發器來實現的,正常情況下每隔3秒會觸發一次訪問記錄器。
緩存池:
高速緩存區中可以存在多種類型的緩存池,默認情況下只有一個緩存池,對應的為配置參數文件中對應的默認的數據塊的大小為db_block_size參數設置。如果在創建表空間時設置的塊的大小有別於db_block_size設置的參數時,這時候就需要在參數文件中設置對應的緩存池。由參數DB_nk_CACHE_SIZE配置,n對應的是就是對應的塊的大小單位是kb。除了以上幾種緩存池外還存在有keep池和循環池。
keep池用長期保持緩存區中的數據使其不會被換出
循環池緩存不被頻繁使用的數據塊