理解ORACLE資料庫
一、體系結構
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle資料庫%notfound的理解Oracle資料庫
- oracle資料塊理解Oracle
- oracle例項、資料庫及相關資料庫狀態的理解和測試Oracle資料庫
- 資料庫遷移 :理解資料庫
- 對Oracle資料庫中Stroage子句的一些理解Oracle資料庫
- 對 oracle 資料庫日期格式,以及對日期操作的理解Oracle資料庫
- 深刻理解Oracle資料庫的啟動和關閉Oracle資料庫
- 深刻理解 oracle 資料庫的啟動和關閉Oracle資料庫
- Oracle 資料庫Oracle資料庫
- 資料庫基礎概念理解資料庫
- 資料庫——對索引的理解資料庫索引
- 資料庫持久連線理解資料庫
- 資料庫-oracle-資料庫遷移資料庫Oracle
- 深刻理解Oracle資料庫的啟動和關閉(轉)Oracle資料庫
- oracle資料庫卡頓Oracle資料庫
- oracle資料庫SCNOracle資料庫
- Oracle資料庫效能Oracle資料庫
- Oracle資料庫管理Oracle資料庫
- Oracle資料庫配置Oracle資料庫
- Oracle資料庫-----資料庫的基本概念Oracle資料庫
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- 將pentaho資料庫遷移到oracle資料庫資料庫Oracle
- 「Oracle」Oracle 資料庫安裝Oracle資料庫
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- [貝聊科技]理解資料庫索引資料庫索引
- 資料庫連線池的理解資料庫
- 關係型資料庫的理解資料庫
- 對資料庫的大體理解資料庫
- 【NUMBER】Oracle資料庫最佳化之理解NUMBER儲存機制Oracle資料庫
- oracle之 oracle database vault(資料庫保險庫)OracleDatabase資料庫
- 【SqlServer】 理解資料庫中的資料頁結構SQLServer資料庫
- 靜默建立oracle資料庫及克隆資料庫Oracle資料庫
- ORACLE DATAGUARD 資料庫---建立物理備用資料庫Oracle資料庫
- ORACLE資料庫修改資料庫名db_nameOracle資料庫
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- oracle資料庫資料字典應用Oracle資料庫
- Oracle資料庫資料遷移流程Oracle資料庫
- Oracle資料庫資料物件分析(上)Oracle資料庫物件