理解ORACLE資料庫

tianweiping2008發表於2009-08-24

一、體系結構

ORACLE是一個具有跨平臺特性的資料庫,ORACLE SERVER分為database和instance。資料檔案、控制檔案、聯機重做日誌、引數檔案、密碼檔案等組合稱為database。一個database可以被一個或多個instance mount。instance由記憶體區和後臺程式組成。

二、instance

記憶體區:SGA+PGA,PGA:會話資訊、排序區、hash join區、棧空間

SGA:shared pool,large pool,java pool,db buffer,log buffer,stream pool,相關檢視:v$sga,v$sga_dynamic_components(儲存SGA中可以動態調整的區域的一些動態或者手工調整記錄)

a)

shared pool:一個太小的共享池會導致ORA-0431錯誤,太大的共享池會消耗大量的CPU管理。該區域分為library cache,dd cache及一些控制結構。dd cache和控制結構是使用者無法直接控制的,使用者只能控制library cache(sql語句緩衝區),這涉及到sql語句的解析問題,sql語句的解析分為硬解析、軟解析、快速解析,在OLTP系統中,強烈要求有bind variable。替代引數cursor_sharing存在比較多問題,而且我們也碰到對應的bug,在生產環境,建議不使用該引數。共享池是採用LRU演算法來判斷物件是否保留,對於間歇性訪問的比較大的物件(過程與包...),可以用dbms_shared_pool.keep將該過程或包pin在共享池中。與共享池有關的檢視:v$sqlarea,v$sqltext_with_newlines,v$sql_plan,v$sqltext,v$shared_pool_advice

b)

data buffer:資料緩衝區雖不會象共享池那樣容易導致系統故障,但是它卻影響著資料庫效能,因為它可以避免磁碟尋道動作,cache hit和cache miss就是衡量cache命中率的引數。對於OLTP來說,cache命中率是很重要的,對於OLAP來說則不然,因為OLAP要取的資料量N大,所以這時我們會從儲存頻寬考慮。資料緩衝區的快基本在2個連結串列上,Dirty list&LRU list。Dirty list表示被修改過的塊,採用檢查點佇列來管理這些塊,定時啟動DBWR將它們寫到db file,對於LRU list,表示不髒塊的列表,通常是select從硬碟讀過來的塊,從8i開始,還引入了touch概念,使得LRU演算法更加複雜。塊緩衝區快取記憶體(LRU list)可以分為3個部分,default pool、keep pook、recycle pool。從9i開始,oracle又支援建立不同塊尺寸的表空間,解決了在不同塊大小的資料庫之間傳輸表空間的問題,並且可以為不同塊尺寸的資料塊指定不同大小的資料緩衝區,不同塊尺寸的資料緩衝區大小由db_nk_cache_size來指定。v$bh記錄了資料塊在資料緩衝區內的使用情況。

c)

PGA:9i開始,用pga_aggregate_target來指定所有session共同使用最大PGA記憶體上限,用workarea_size_policy來控制是否自動PGA調整機制,如果為AUTO則表示採用自動PGA管理,如果為MANUAL,則需要自己定義每個session的sort_area_size,hash_area_size。10g後oracle開始用了自動SGA管理,透過設定sga_target來實現,如果sga_target設為0表示採用手工管理SGA記憶體元件方式。11g中引入了memory_target和memory_max_target來控制整個記憶體。SGA+PGA大小設定:如果記憶體為1G,2者和為40%~50%,如果記憶體為4G~8G:設定為50%~60%,如果記憶體大於8G,設定為60~70%,強烈建議在任何情況下,PGA+SGA大小不高於實體記憶體的70%,在AIX上出現過設定過大而當機現象。

三、後臺程式

dbwr:負責將資料緩衝區中資料寫入db file。觸發條件:1、超時,大約3秒。2、系統中沒多餘空閒緩衝區來存放資料。3、ckpt觸發

lgwr:負責將日誌緩衝區中資料寫入聯機日誌檔案,當資料被修改時,系統會產生一個重做日誌並記錄在重做日誌緩衝區中。觸發條件:1、使用者提交。2、有1/3重做日誌緩衝區未被寫入磁碟。3、有大於1M重做日誌緩衝區未被寫入磁碟。4、超時。5、dbwr需要寫入的scn大於lgwr記錄的scn,dbwr觸發lgwr

ckpt:檢查點程式,負責同步資料檔案、控制檔案和聯機日誌檔案。

四、scn

scn:scn可能存在於資料檔案頭、控制檔案頭、聯機日誌檔案、歸檔檔案,甚至存在於資料塊中,透過控制檔案和資料檔案的scn對比,可以知道當前資料檔案與控制檔案是否同步,是否需要介質恢復;聯機日誌、歸檔日誌中的scn,可以用於資料庫的介質恢復;資料塊中的scn,可以保證讀一致性。scn具備特點:1、查詢語句不改變scn,即使是同時發生的更新,對應的scn也是不同,這樣可以保證資料恢復時的順序。2、維持資料的一致性讀,當一個查詢發生時,它首先會先去系統中找出當前的scn,在查詢資料同時,它會檢查資料行及其對應的scn,只有那些小於或等於當前scn的行才從資料檔案緩衝區中取出,那些大於當前scn的行,會從回滾段資料檔案緩衝區中取出。

五、物理結構與邏輯結構

邏輯結構:database->tablespace->segment->extent->block

a)表空間

具備特性:1、9i開始引入系統預設表空間設定,alter database default tablespace ****;透過sql:select property_value from database_properties where property_name='DEFAULT_PERMANENT_TABLESPACE';可以獲得。2、不同塊大小支援。3、10g開始支援重新命名錶空間alter tablespace ** rename to ***;4、刪除表空間的資料檔案,10gR2開始支援alter tablespace *** drop datafile 'data file name';

b)段

段型別:表段、索引段、表分割槽段、索引分割槽段、臨時段、回滾段、LOB段

[@more@]

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

相關文章