oracle10g SGA
SGA(System Global Area)是一塊用於載入資料、物件並儲存執行狀態和資料控制資訊的一塊區域,在例項啟動時分配,當例項關閉時釋放,每個例項都有自己的SGA。連線到資料庫的使用者都可以共享SGA中的資料,通常為了最佳化效能,在實體記憶體允許的情況下設定更高的SGA,以減少物理I/O的讀寫次數。
1、 固定區域(Fixed Area)
Fixed Area部分是SGA中的固定部分,包含幾千個變數和一些小的資料結構,如Latch或地址指標等,這部分記憶體分配和特定的資料庫版本以及平臺有關,不受使用者限制,而且這些資訊對於資料庫來說非常重要,但都不需要使用者參與。
固定部分只需要很小的記憶體,可以透過一個內部表X$KSMFSV([K]ernel [S]ervice Layer [M]emery Management,Address of [F]ixed [S]GA [V]ariables)查詢,此外,Oracle的內部表X$KSMMEM記錄了整個SGA的地址對映關係,透過X$KSMFSV和X$KSMMEM關聯,可以找出Fixed Area中每個變數的設定。
Fixed Area包含很多控制資訊,但是需要注意的是,查詢X$KSMFSV檢視可能導致程式異常,需要謹慎使用。
2、 Buffer Cache
Buffer Cache用於儲存最近使用的資料塊,這些資料塊可能是被修改過的,也可能是未經修改的,在Oracle對資料的處理過程中,代價最昂貴的就是物理I/O的操作了,所以儘可能多的快取可以提高Oracle資料庫的效能。
在Oracle9i之前,Buffer Cache的設定主要由兩個引數決定:db_block_buffers和db_block_size。Db_block_buffers設定分配給Buffer Cache的db_block數量,db_block_size指定資料塊的尺寸。這兩個資料的乘積才是Buffer Cache的大小。
從Oracle9i開始,Oracle引入了一個新的初始化引數db_cache_size,該引數用來定義主Block_size的Default緩衝池的大小。
Db_cache_size最小值為一個粒度(Granule),粒度也是Oracle9i引入的一個新的概念,是連續虛擬記憶體分配的單位,其大小取決於估計的SGA的總大小。
在Oracle10gR2中,Granule的分配演算法有所改變,在大多數平臺上,如果SGA<1GB,Granule通常為4MB。Granule的大小受一個內部隱含引數_ksmg_granule_size的控制。
Enter value for par: _ksmg_granule_size
NAME VALUE PDESC
------------------------------ ------------------------- ----------------------------------------
_ksmg_granule_size 4194304 granule size in bytes
各記憶體元件所使用的Granule大小可以透過動態檢視查詢得到,如下所示:
SQL> select component,granule_size from v$sga_dynamic_components;
COMPONENT GRANULE_SIZE
---------------------------------------------------------------- ------------
shared pool 4194304
large pool 4194304
pool 4194304
streams pool 4194304
DEFAULT buffer cache 4194304
KEEP buffer cache 4194304
RECYCLE buffer cache 4194304
DEFAULT 2K buffer cache 4194304
DEFAULT 4K buffer cache 4194304
DEFAULT 8K buffer cache 4194304
DEFAULT 16K buffer cache 4194304
DEFAULT 32K buffer cache 4194304
ASM Buffer Cache 4194304
Oracle對於Buffer Cache的管理採用的LRU演算法,但是這又帶來另一個問題,很多批處理操作(如全表掃描)可能會導致Buffer Cache的重新整理,將經常使用的資料“擠出”Buffer Cache,在不同的版本中,Oracle也在不停的改進LRU的演算法,提出了多緩衝池,從另一個方面來解決這個問題。所謂的多緩衝池是將預設的緩衝池做進一步的細分,如下:
(1) Default Buffer Cache
(2) Keep Buffer Cache
(3) Recycle Buffer Cache
不同的緩衝池對資料的緩衝時間不同。對於經常使用的資料,可以在建表是就指定將其存放在Keep池中;對於經常一次性讀取的資料,可以將其放在Recycle池中,而Default池用於存放未指定儲存池的資料,按照LRU演算法。
預設情況下,所有表都使用Default池,它的大小就是資料緩衝區Buffer Cache的大小,由初始化引數db_cache_size決定。
此外,從Oracle9i開始支援多型別資料塊大小表空間支援,在一個資料庫中可以存在多種block_size的表空間,分別支援2k
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24829399/viewspace-1051678/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle10g 修改 sga pgaOracle
- Oracle10g修改SGA_TARGETOracle
- oracle10g sga手工管理mmm之一Oracle
- oracle10g sga自動管理amm(補充一)Oracle
- oracle10g在sga手工管理mmm模式如何配置大池large_pool_size(一)Oracle模式
- sga_target與sga_max_size
- SGA_MAX_SIZE與SGA_TARGET
- sga_target與max_sga_size
- show sga和show parameter sga的區別
- 【轉】SGA_MAX_SIZE與SGA_TARGET
- 自動SGA共享記憶體管理,ASMM,MMAN,sga_target,sga_max_size記憶體ASM
- Large SGA On LinuxLinux
- 記憶體_SGA記憶體
- oracle sga相關Oracle
- Sga的結構
- oracle sga構成Oracle
- 使用lock_sga和pre_page_sga引數保證SGA常駐實體記憶體記憶體
- 【sga】資料庫啟動時的的SGA大小顯示資料庫
- 【引數】使用lock_sga和pre_page_sga引數保證SGA常駐實體記憶體記憶體
- 變更oracle 11.2.0.3 rac sga自動管理為sga手工管理Oracle
- 轉:關於SGA_MAX_SIZE與SGA_TARGET的詳解
- SGA_TARGET Advice
- oracle SGA配置和管理Oracle
- ORACLE SGA 的分配(轉)Oracle
- Limiting the Size of the SGA (96)MIT
- Other SGA Initialization Parameters (96)
- 關於memory_max_target,memory_target,sga_max_size,sga_target
- oracle 10g中的SGA_MAX_SIZE與SGA_TARGET引數Oracle 10g
- v$sga_target_advice
- PGA,sga命中sql查詢SQL
- ORACLE SGA之shared poolOracle
- oracle 92 修改sga過程Oracle
- sga_target大小調整
- SGA與共享記憶體記憶體
- 查詢SGA和PGA大小
- Oracle SGA中的Granule(粒度)Oracle
- The SGA_TARGET Initialization Parameter (74)
- sga contains infomation (71)AI