1.oracle體系結構(筆記)

tonykorn97發表於2006-04-08

1.oracle體系結構

Oracle server由例程(instance)和資料庫(database)兩部分組成。

例程(instance)是一組記憶體結構和後臺程式的集會,其記憶體結構主要包括資料快取記憶體,重做日誌緩衝區和共享池3部分,這些記憶體結構總稱為SGASystem Global Area;

後臺程式主要包括SMON,PMON,DBWR,CKPT,LGWR,ARCH等。

資料庫是一組OS檔案的集會,它由資料檔案,控制檔案和重做日誌組成,


SGASystem Global Area)是一組記憶體結構組成,它是由所有使用者程式共享的一塊記憶體區域。啟動例程時,Oracle自動分配SGA;關閉例程時,Oracle自動釋放SGA所佔用的記憶體空間。

SGA主要包括共享池(Shared Pool),資料快取記憶體(database buffer chche)和重做日誌緩衝區(redo log buffer3個部分。

共享池(shared pool)用於存放最近執行的SQL語句和資料字典資訊,其尺寸由初始化引數SHARED_POOL_SIZE定義。共享池由庫高速緩衝(Library Cache)和資料字典快取記憶體(Dictionary Cache)兩部分組成。

庫快取記憶體(Library Cache)庫快取記憶體由用於存放最近執行的SQL語句資訊,包括SQL語句文字,解析程式碼值及其執行計劃。庫高速緩衝包含許多上下文區(Contest Area),每個上下文區都包含相應的SQL語句的執行計劃,這些上下文區又被稱為共享遊標。當客戶端執行SQL語句時,伺服器程式首先檢查共享遊標是否存在,若存在則按照其執行計劃直接執行語句,若不存在則生成SQL語句執行計劃,並將計劃存放到相應的上下文區中,然後執行改SQL語句。透過共享遊標,可以最小化SQL語句解析次數,從而提高SQL語句的執行效能。

資料字典快取記憶體(Dictionary Cache)用於存放資料字典的資訊,包括表,列的定義以及許可權資訊。庫快取記憶體和資料字典快取記憶體的尺寸是動態變化的,不是固定的!

資料快取記憶體(Database buffer cache)用於存放最近訪問的資料塊資訊,它由許多小緩衝區(快取區尺寸=資料塊尺寸)組成。在 Oracle Database 10g中,使用初始化引數DB_CACHE_SIZEDB_Nk_CACHE_SIZE(n2481632)來定義資料快取記憶體的尺寸。按照緩衝區使用的情況,可以將其劃分為髒緩衝區(Dirty Buffer,空閒緩衝區(free buffer,忙緩衝區(pinned buffer)三種。髒緩衝區是指內容和相應的資料塊不一致的緩衝區,當執行DML操作是,伺服器程式會修改緩衝區資料,此時緩衝區和資料塊內容不一致。空閒緩衝區是指內容與資料塊一致或不包含資料的緩衝區,當執行SELECT操作是,緩衝區與資料塊內容一致。忙緩衝區是指伺服器程式正在存取快取區。

重做日誌緩衝區(redo log buffer)用於記載例程變化,其尺寸由初始化引數LOG_BUFFER定義。當執行DDLDML語句時,伺服器程式首先將事務變化記載到重做日誌緩衝區,然後才會修改資料快取記憶體。重做日誌緩衝區由許多重做記錄(redo record)組成,並且每條重做記錄記載了被修改資料塊的位置以及變化後的資料。

大快取池和java

SGA除了包含共享池,資料快取記憶體和重做日誌緩衝區之外,還提供了兩個可選的記憶體結構:大緩衝池(large pool)和java池(java pool)。

大緩衝池用於為大記憶體操作提供相對獨立的記憶體空間。透過分配大緩衝池,可以提高這些大記憶體操作的效能。一下情況應分配大緩衝池:

使用共享伺服器

使用RMAN在磁帶裝置商執行備份,轉儲和恢復操作。

執行並行查詢

使用I/O Slaves提高I/O效能(如配置初始化引數dbwr_io_slaves

Java池用於存放java程式碼,其尺寸由初始化引數JAVA_POOL_SIZE定義。如果要在oracle資料庫中安裝java VM,必須配置java池,並且其尺寸應該大於20M

PGA(Program Global Area)用於存放伺服器程式的資料和控制資訊,它時獨立於SGA的一塊記憶體區域。當使用者程式連線到Oracel Server

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245212/,如需轉載,請註明出處,否則將追究法律責任。

相關文章