Oracle的邏輯結構、物理結構與實例(doc16頁)完美版_第1頁
Oracle的邏輯結構、物理結構與實例(doc16頁)完美版_第2頁
Oracle的邏輯結構、物理結構與實例(doc16頁)完美版_第3頁
Oracle的邏輯結構、物理結構與實例(doc16頁)完美版_第4頁
Oracle的邏輯結構、物理結構與實例(doc16頁)完美版_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Oracle 體系結構數(shù)據(jù)庫(Database)數(shù)據(jù)庫是一個數(shù)據(jù)的集合, 不僅是指物理上的數(shù)據(jù), 也指物理、 存儲及進程對象的一個組合。Oracle 是一個基于B/S 模式的關系型數(shù)據(jù)庫管理系統(tǒng)( RDBMS ) 。Oracle 系統(tǒng)體系結構由三部分組成:邏輯結構、物理結構和實例。數(shù)據(jù)庫(Database)一、 Oracle 的邏輯結構Oracle 的邏輯結構是一種層次結構。主要由:表空間、段、區(qū)和數(shù)據(jù)塊等概念組成。邏輯結構是面向用戶的,用戶使用 Oracle 開發(fā)應用程序使用的就是邏輯結構。數(shù)據(jù)庫存儲層次結構及其構成關系,結構對象也從數(shù)據(jù)塊到表空間形成了不同層次的粒度關系。1 .數(shù)據(jù)塊( D

2、ata Blocks )數(shù)據(jù)塊是Oracle 最小的存儲單位, Oracle 數(shù)據(jù)存放在“塊”中。一個塊占用一定的磁盤空間。特別注意的是,這里的“塊”是Oracle 的“數(shù)據(jù)塊” ,不是操作系統(tǒng)的“塊” 。Oracle 每次請求數(shù)據(jù)的時候,都是以塊為單位。也就是說, Oracle 每次請求的數(shù)據(jù)是塊的整數(shù)倍。 如果 Oracle 請求的數(shù)據(jù)量不到一塊, Oracle 也會讀取整個塊。 所以說, “塊” 是 Oracle 讀寫數(shù)據(jù)的最小單位或者最基本的單位。塊的標準大小由初始化參數(shù)DB_BLOCK_SIZE 指定。 具有標準大小的塊稱為標準塊 (StandardBlock) 。塊的大小和標準塊的

3、大小不同的塊叫非標準塊 (Nonstandard Block) 。操作系統(tǒng)每次執(zhí)行I/O 的時候, 是以操作系統(tǒng)的塊為單位;Oracle 每次執(zhí)行 I/O 的時候, 都是以 Oracle 的塊為單位。Oracle 數(shù)據(jù)塊大小一般是操作系統(tǒng)塊的整數(shù)倍。數(shù)據(jù)塊的格式(Data Block Format)塊中存放表的數(shù)據(jù)和索引的數(shù)據(jù), 無論存放哪種類型的數(shù)據(jù), 塊的格式都是相同的, 塊由塊頭 (header/Common and Variable), 表目錄 (Table Directory), 行目錄 (Row Directory), 空余空間(Free Space)和行數(shù)據(jù)(Row Data)五

4、部分組成,如下圖塊頭 (header/Common and Variable) :存放塊的基本信息,如:塊的物理地址,塊所屬的段的類型(是數(shù)據(jù)段還是索引段) 。表目錄(Table Directory) :存放表的信息,即:如果一些表的數(shù)據(jù)被存放在這個塊中,那么,這些表的相關信息將被存放在“表目錄”中。行目錄(Row Directory) :如果塊中有行數(shù)據(jù)存在,則,這些行的信息將被記錄在行目錄中。這些信息包括行的地址等。行數(shù)據(jù)(Row Data) :是真正存放表數(shù)據(jù)和索引數(shù)據(jù)的地方。這部分空間是已被數(shù)據(jù)行占用的空間??沼嗫臻g(Free Space):空余空間是一個塊中未使用的區(qū)域,這片區(qū)域用于

5、新行的插入和已經(jīng)存在的行的更新。頭部信息區(qū)(Overhead):我們把塊頭(header/Common and Variable),表目錄(Table Directory),行目錄 (Row Directory) 這三部分合稱為頭部信息區(qū)(Overhead) 。頭部信息區(qū)不存放數(shù)據(jù),它存放的整個塊的信息。頭部信息區(qū)的大小是可變的。一般來說,頭部信息區(qū)的大小介于84 字節(jié)(bytes)至U 107 字節(jié)(bytes)之間。數(shù)據(jù)塊中自由空間的使用當往數(shù)據(jù)庫中插入(INSERT)數(shù)據(jù)的時候,塊中的自由空間會減少;當對塊中已經(jīng)存在的行進行修改 (UPDATE) 的時候(使記錄長度增加),塊中的自由空間

6、也會減少。DELETE 語句和 UPDATE 語句會使塊中的自由空間增加。當使用 DELETE 語句刪除塊中的記錄或者使用 UPDATE 語句把列的值更改成一個更小值的時候, Oracle 會釋放出一部分自由空間。 釋放出的自由空間并不一定是連續(xù)的。 通常情況下, Oracle 不會對塊中不連續(xù)的自由空間進行合并。 因為合并數(shù)據(jù)塊中不連續(xù)的自由空間會影響數(shù)據(jù)庫的性能。 只有當用戶進行數(shù)據(jù)插入 (INSERT) 或者更新 (UPDATE) 操作,卻找不到連續(xù)的自由空間的時候, Oracle 才 會合并數(shù)據(jù)塊中不連續(xù)的自由空間。對于塊中的自由空間, Oracle 提供兩種管理方式:自動管理,手動管

7、理行鏈接和行遷移 (Row Chaining and Migrating)行鏈接(Row Chaining):如果我們往數(shù)據(jù)庫中插入(INSERT)一行數(shù)據(jù),這行數(shù)據(jù)很大,以至于一個數(shù)據(jù)塊存不下一整行, Oracle 就會把一行數(shù)據(jù)分作幾段存在幾個數(shù)據(jù)塊中, 這個過程 叫行鏈接 (Row Chaining) 。如下圖所示:如果一行數(shù)據(jù)是普通行,這行數(shù)據(jù)能夠存放在一個數(shù)據(jù)塊中 ;如果一行數(shù)據(jù)是鏈接行,這行數(shù)據(jù)存放在多個數(shù)據(jù)塊中。行遷移 (Row Migrating) :數(shù)據(jù)塊中存在一條記錄,用戶執(zhí)行UPDATE 更新這條記錄,這個UPDATE 操作使這條記錄變長, 這時候, Oracle 在這個

8、數(shù)據(jù)塊中進行查找, 但是找不到能夠 容納下這條記錄的空間, 無奈之下, Oracle 只能把整行數(shù)據(jù)移到一個新的數(shù)據(jù)塊。 原來的數(shù) 據(jù)塊中保留一個“指針” ,這個“指針”指向新的數(shù)據(jù)塊。被移動的這條記錄的 ROWID 保 持不變。行遷移的原理如下圖所示:無論是行鏈接還是行遷移, 都會影響數(shù)據(jù)庫的性能。 Oracle 在讀取這樣的記錄的時候, Oracle 會掃描多個數(shù)據(jù)塊,執(zhí)行更多的 I/O 。塊中自由空間的自動管理Oracle 使用位圖 (bitmap) 來管理和跟蹤數(shù)據(jù)塊,這種塊的空間管理方式叫“自動管理” 。自動 管理有下面的好處:易于使用更好地利用空間可以對空間進行實時調整塊中自由空間

9、的手動管理用戶可以通過PCTFREE, PCTUSED 來調整塊中空間的使用,這種管理方式叫手動管理。相對于自動管理,手動管理方式比較麻煩,不容易掌握,容易造成塊中空間的浪費。PCTUSED 也是用于設置一個百分比,當塊中已使用的空間的比例小于這個百分比的時候,這個塊才被標識為有效狀態(tài)。只有有效的塊才被允許插入數(shù)據(jù)。PCTFREE 參數(shù)用于指定塊中必須保留的最小空閑空間百分例, 默認值為10。 之所以要預留這樣的空間, 是因為 UPDATE 時, 需要這些空間。 如果 UPDATE 時, 沒有空余空間, Oracle 就會分配一個新的塊,這會產(chǎn)生行遷移 (Row Migrating) 。例如,

10、假定在Create table語句中指定了 pctfree為20,則說明在該表的數(shù)據(jù)段內(nèi)每個數(shù)據(jù)塊的 20%被作為可利用的空閑空間,用于更新已在數(shù)據(jù)塊內(nèi)存在的數(shù)據(jù)行其余80%是用于插入新的數(shù)據(jù)行,直到達到 80% 為止。顯然, pctfree 值越小,則為現(xiàn)存行更新所預留的空間越少。因此,如果pctfree 設置得太高,則在全表掃描期間增加 I/O ,浪費磁盤空間;如果pctfree 設置得太低,則會導致行遷移。 pctused 參數(shù)設置了數(shù)據(jù)塊是否是空閑的界限。 當數(shù)據(jù)塊的使用空間低于pctused 的值時, 此數(shù)據(jù)塊標志為空閑,該空閑空間僅用于插入新的行。如果數(shù)據(jù)塊已經(jīng)達到了由 pctfr

11、ee 所確 定的上邊界時, Oracle 就認為此數(shù)據(jù)塊已經(jīng)無法再插入新的行。例如,假定在 Create table 語句中指定pctused 為 40,則當小于或等于39 時,該數(shù)據(jù)塊才是可用的。所以,可將數(shù)據(jù)塊填得更滿, 這樣可節(jié)省空間, 但卻增加了處理開銷, 因為數(shù)據(jù)塊的空閑空間總是要被更新 的行占據(jù),所以對數(shù)據(jù)塊需要頻繁地進行重新組織。比較低的pctused增加了數(shù)據(jù)庫的空閑空間,但減少了更新操作的處理開銷。所以,如果pctused 設置過高,則會降低磁盤的利用率導致行遷移;若pctused設置過低,則浪費磁盤空間,增加全表掃描時的I/O輸出。pctused 是與 pctfree 相對

12、的參數(shù)。那么,如何選擇 pctfree和pctused的值呢?有個公式可供參考。顯然, pctfree和pctused的之和不能超過100。 若兩者之和低于100, 則空間的利用與系統(tǒng)的 I/O 之間的最佳平衡點是:pctfree 與 pctused 之和等于 100%減去一行的大小占塊空間大小的百分比。例如,如果塊大小為 2048 字節(jié),則它需要100 個字節(jié)的開銷,而行大小是390 字節(jié)(為可用塊的 20% ) 。為了充分利用空間,pctfree與pctused之和最好為80%。那么,怎樣確定數(shù)據(jù)塊大小呢?有兩個因素需要考慮:一是數(shù)據(jù)庫環(huán)境類型。 例如, 是 DSS 環(huán)境還是 OLTP 環(huán)

13、境?在數(shù)據(jù)倉庫環(huán)境( OLAP 或 DSS)下,用戶需要進行許多運行時間很長的查詢,所以應當使用大的數(shù)據(jù)塊。在OLTP 系統(tǒng)中,用戶處理大量的小型事務,采用較小數(shù)據(jù)塊能夠獲得更好的效果。二是 SGA 的大小。 數(shù)據(jù)庫緩沖區(qū)的大小由數(shù)據(jù)塊大小和初始化文件的 db_block_buffers 參數(shù)決定。最好設為操作系統(tǒng)I/O 的整數(shù)倍。2 數(shù)據(jù)區(qū)(Extent )是一組連續(xù)的數(shù)據(jù)塊。 當一個表、 回滾段或臨時段創(chuàng)建或需要附加空間時, 系統(tǒng)總是為之分配一個新的數(shù)據(jù)區(qū)。 一個數(shù)據(jù)區(qū)不能跨越多個文件, 因為它包含連續(xù)的數(shù)據(jù)塊。 使用區(qū)的目的是用來保存特定數(shù)據(jù)類型的數(shù)據(jù),也是表中數(shù)據(jù)增長的基本單位。在Or

14、acle 數(shù)據(jù)庫中,分配空間就是以數(shù)據(jù)區(qū)為單位的。一個Oracle 對象包含至少一個數(shù)據(jù)區(qū)。設置一個表或索引的存儲參數(shù)包含設置它的數(shù)據(jù)區(qū)大小。3 段(Segment)是由多個數(shù)據(jù)區(qū)構成的,它是為特定的數(shù)據(jù)庫對象(如表段、索引段、回滾段、臨時段)分配的一系列數(shù)據(jù)區(qū)。 段內(nèi)包含的數(shù)據(jù)區(qū)可以不連續(xù), 并且可以跨越多個文件。 使用段的目的是用來保存特定對象。一個Oracle 數(shù)據(jù)庫有 4 種類型的段:數(shù)據(jù)段:數(shù)據(jù)段也稱為表段,它包含數(shù)據(jù)并且與表和簇相關。 當創(chuàng)建一個表時,系統(tǒng)自動創(chuàng)建一個以該表的名字命名的數(shù)據(jù)段。索引段: 包含了用于提高系統(tǒng)性能的索引。 一旦建立索引, 系統(tǒng)自動創(chuàng)建一個以該索引的名字命

15、名的索引段?;貪L段: 包含了回滾信息, 并在數(shù)據(jù)庫恢復期間使用, 以便為數(shù)據(jù)庫提供讀入一致性和回滾未提交的事務, 即用來回滾事務的數(shù)據(jù)空間。 當一個事務開始處理時, 系統(tǒng)為之分配回滾段,回滾段可以動態(tài)創(chuàng)建和撤銷。 系統(tǒng)有個默認的回滾段, 其管理方式既可以是自動的, 也可以是手工的。臨時段:它是Oracle 在運行過程中自行創(chuàng)建的段。當一個SQL 語句需要臨時工作區(qū)時,由Oracle 建立臨時段。一旦語句執(zhí)行完畢,臨時段的區(qū)間便退回給系統(tǒng)。4 表空間(tablespace)是數(shù)據(jù)庫的邏輯劃分。 任何數(shù)據(jù)庫對象在存儲時都必須存儲在某個表空間中。 表空間對應于若干個磁盤文件, 即表空間是由一個或多個

16、磁盤文件構成的。 表空間相當于操作系統(tǒng)中的文件夾,也是數(shù)據(jù)庫邏輯結構與物理文件之間的一個映射。每個數(shù)據(jù)庫至少有一個表空間( system tablespace) ,表空間的大小等于所有從屬于它的數(shù)據(jù)文件大小的總和。( 1 )系統(tǒng)表空間( system tablespace)是每個 Oracle 數(shù)據(jù)庫都必須具備的。其功能是在系統(tǒng)表空間中存放諸如表空間名稱、表空間所含數(shù)據(jù)文件等數(shù)據(jù)庫管理所需的信息。 系統(tǒng)表空間的名稱是不可更改的。 系統(tǒng)表空間必須在任何時候都可以用,也是數(shù)據(jù)庫運行的必要條件。因此,系統(tǒng)表空間是不能脫機的。系統(tǒng)表空間包括數(shù)據(jù)字典、 存儲過程、 觸發(fā)器和系統(tǒng)回滾段。 為避免系統(tǒng)表空間

17、產(chǎn)生存儲碎片以及爭用系統(tǒng)資源的問題,應創(chuàng)建一個獨立的表空間用來單獨存儲用戶數(shù)據(jù)。( 2 ) SYSAUX 表空間是隨著數(shù)據(jù)庫的創(chuàng)建而創(chuàng)建的,它充當 SYSTEM 的輔助表空間,主要存儲除數(shù)據(jù)字典以外的其他對象。 SYSAUX 也是許多 Oracle 數(shù)據(jù)庫的默認表空間,它減少了由數(shù)據(jù)庫和 DBA管理的表空間數(shù)量,降低了 SYSTEM 表空間的負荷。( 3 )臨時表空間相對于其他表空間而言,臨時表空間( temp tablespaces)主要用于存儲 Oracle數(shù)據(jù)庫運行期間所產(chǎn)生的臨時數(shù)據(jù)。 數(shù)據(jù)庫可以建立多個臨時表空間。 當數(shù)據(jù)庫關閉后, 臨時表空間中所有數(shù)據(jù)將全部被清除。除臨時表空間外,

18、其他表空間都屬于永久性表空間。( 4 )撤銷表空間用于保存 Oracle 數(shù)據(jù)庫撤銷信息,即保存用戶回滾段的表空間稱之為回滾表空間(或簡稱為 RBS 撤銷表空間( undo tablespace) ) 。在 Oracle8i 中是 rollback tablespace ,從 Oracle9i 開 始改為undo tablespace。在Oracle 10g中初始創(chuàng)建的只有 6個表空間sysaux、system、temp、 undotbsl、example和users。其中temp是臨時表空間,undotbs1是undo撤銷表空間。( 5 ) USERS 表空間用戶表空間, 用于存放永久性用戶

19、對象的數(shù)據(jù)和私有信息。 每個數(shù)據(jù)塊都應該有一個用戶表空間,以便在創(chuàng)建用戶是將其分配給用戶。二、物理結構Oracle 物理結構包含了數(shù)據(jù)文件、日志文件和控制文件1 .數(shù)據(jù)文件每一個 ORACLE 數(shù)據(jù)庫有一個或多個物理的數(shù)據(jù)文件(data file) 。一個數(shù)據(jù)庫的數(shù)據(jù)文件包含全部數(shù)據(jù)庫數(shù)據(jù)。 邏輯數(shù)據(jù)庫結構(如表、索引)的數(shù)據(jù)物理地存儲在數(shù)據(jù)庫的數(shù)據(jù)文件中。數(shù)據(jù)文件有下列特征:一個數(shù)據(jù)文件僅與一個數(shù)據(jù)庫聯(lián)系。一旦建立,數(shù)據(jù)文件不能改變大小 .一個表空間(數(shù)據(jù)庫存儲的邏輯單位)由一個或多個數(shù)據(jù)文件組成。數(shù)據(jù)文件中的數(shù)據(jù)在需要時可以讀取并存儲在ORACLE 內(nèi)存儲區(qū)中。例如:用戶要存取數(shù)據(jù)庫一表的

20、某些數(shù)據(jù), 如果請求信息不在數(shù)據(jù)庫的內(nèi)存存儲區(qū)內(nèi), 則從相應的數(shù)據(jù)文件中讀取并存儲在內(nèi)存。 當修改和插入新數(shù)據(jù)時, 不必立刻寫入數(shù)據(jù)文件。 為了減少磁盤輸出的總數(shù), 提高性能, 數(shù)據(jù)存儲在內(nèi)存, 然后由 ORACLE 后臺進程 DBWR 決定如何將其寫入到相 應的數(shù)據(jù)文件。2 .日志文件每一個數(shù)據(jù)庫有兩個或多個日志文件( redo log file )的組, 每一個日志文件組用于收集數(shù)據(jù)庫日志。 日志的主要功能是記錄對數(shù)據(jù)所作的修改, 所以對數(shù)據(jù)庫作的全部修改是記錄在日志中。 在出現(xiàn)故障時, 如果不能將修改數(shù)據(jù)永久地寫入數(shù)據(jù)文件, 則可利用日志得到該修改,所以從不會丟失已有操作成果。日志文件主

21、要是保護數(shù)據(jù)庫以防止故障。為了防止日志文件本身的故障, ORACLE 允許鏡象日志 (mirrored redo log) ,以致可在不同磁盤上維護兩個或多個日志副本。日志文件中的信息僅在系統(tǒng)故障或介質故障恢復數(shù)據(jù)庫時使用, 這些故障阻止將數(shù)據(jù)庫數(shù)據(jù)寫入到數(shù)據(jù)庫的數(shù)據(jù)文件。然而任何丟失的數(shù)據(jù)在下一次數(shù)據(jù)庫打開時, ORACLE 自動地應用日志文件中的信息來恢復數(shù)據(jù)庫數(shù)據(jù)文件。Oralce 兩種日志文件類型:聯(lián)機日志文件這是 Oracle 用來循環(huán)記錄數(shù)據(jù)庫改變的操作系統(tǒng)文件歸檔日志文件這是指為避免聯(lián)機日志文件重寫時丟失重復數(shù)據(jù)而對聯(lián)機日志文件所做的備份Oracle 有兩種歸檔日志模式, Ora

22、cle 數(shù)據(jù)庫可以采用其中任何一種模式:NOARCHIVELOG不對日志文件進行歸檔。 這種模式可以大大減少數(shù)據(jù)庫備份的開銷, 但可能回導致數(shù)據(jù)的不可恢復ARCHIVELOG在這種模式下,當 Oracle 轉向一個新的日志文件時,將以前的日志文件進行歸檔。為了防止出現(xiàn)歷史 “缺口” 的情況,一個給定的日志文件在它成功歸檔之前是不能重新使用的。歸檔的日志文件,加上聯(lián)機日志文件,為數(shù)據(jù)庫的所有改變提供了完整的歷史信息。在 Oracle 利用日志文件和歸檔日志文件來恢復數(shù)據(jù)庫時,內(nèi)部序列號可以起一個向導的作用。3 .控制文件每一 ORACLE 數(shù)據(jù)庫有一個控制文件(control file) ,它記

23、錄數(shù)據(jù)庫的物理結構,包含下列信息類型:數(shù)據(jù)庫名;數(shù)據(jù)庫數(shù)據(jù)文件和日志文件的名字和位置;數(shù)據(jù)庫建立日期。為了安全起見,允許控制文件被鏡象。每一次 ORACLE 數(shù)據(jù)庫的實例啟動時,它的控制文件用于標識數(shù)據(jù)庫和日志文件,當著手數(shù)據(jù)庫操作時它們必須被打開。當數(shù)據(jù)庫的物理組成更改時, ORACLE 自動更改該數(shù)據(jù)庫的控制文件。數(shù)據(jù)恢復時,也要使用控制文件。4 .參數(shù)文件除了構成 Oracle 數(shù)據(jù)庫物理結構的三類主要文件外, Oracle 數(shù)據(jù)庫還具有另外一種重要的文件:參數(shù)文件。參數(shù)文件記錄了 Oracle 數(shù)據(jù)庫的基本參數(shù)信息,主要包括數(shù)據(jù)庫名、控制文件所在路徑、進程等。與舊版本的初始化參數(shù)文件I

24、NITsid.ora 不同,在 Oracle10g 中還可以使用二進進制服務器參數(shù)文件,并且該服務器參數(shù)文件在安裝Oracle 數(shù)據(jù)庫系統(tǒng)時由系統(tǒng)自動創(chuàng)建,文件的名稱為 SPFILEsid.ora , sid 為所創(chuàng)建的數(shù)據(jù)庫實例名。SPFILEsid.ora 中的參數(shù)是由 Oracle 系統(tǒng)自動管理。 如果想要對數(shù)據(jù)庫的某些參數(shù)進行設置,則可能過 OEM 或 ALTER SYSTEM 命令來修改。用戶最好不要用編輯器進行修改。三、實例(instance)數(shù)據(jù)庫實例 (也稱為服務器Server) 就是用來訪問一個數(shù)據(jù)庫文件集的一個存儲結構及后臺進程的集合。它使一個單獨的數(shù)據(jù)庫可以被多個實例訪問

25、(也就是ORACLE 并行服務器-OPS) 。實例在操作系統(tǒng)中用 ORACLE_SID 來標識, 在 Oracle 中用參數(shù) INSTANCE_NAME 來標識,它們兩個的值是相同的。 數(shù)據(jù)庫啟動時, 系統(tǒng)首先在服務器內(nèi)存中分配系統(tǒng)全局區(qū) ( SGA ) ,構成了 Oracle 的內(nèi)存結構, 然后啟動若干個常駐內(nèi)存的操作系統(tǒng)進程, 即組成了 Oracle 的 進程結構,內(nèi)存區(qū)域和后臺進程合稱為一個Oracle 實例。1.系統(tǒng)全局區(qū)(SGA )SGA 是一組為系統(tǒng)分配的共享的內(nèi)存結構, 可以包含一個數(shù)據(jù)庫實例的數(shù)據(jù)或控制信: 息。如果多個用戶連接到同一個數(shù)據(jù)庫實例, 在實例的 SGA 中, 數(shù)據(jù)

26、可以被多個用戶共享, 當 數(shù)據(jù)庫實例啟動時, SGA 的內(nèi)存被自動分配; 當數(shù)據(jù)庫實例關閉時, SGA 內(nèi)存被回收。 SGA 是占用內(nèi)存最大的一個區(qū)域,同時也是影響數(shù)據(jù)庫性能的重要因素。系統(tǒng)全局區(qū)(SGA ) ,主要包括:1)數(shù)據(jù)塊緩存區(qū) 數(shù)據(jù)塊緩存區(qū)(datablockbuffercache) 是 SGA 中的一個高速緩存區(qū)域, 用來存儲從數(shù)據(jù)庫中讀取數(shù)據(jù)段的數(shù)據(jù)塊(如表、索引和簇 )。 數(shù)據(jù)塊緩存區(qū)的大小由數(shù)據(jù)庫服務器 init.ora 文件中的DB_LOCK_BUFFERS 參數(shù)決定 (用數(shù)據(jù)庫塊的個數(shù)表示) 。在調整和管理數(shù)據(jù)庫時,調整數(shù)據(jù)塊緩存區(qū)的大小是一個重要的部分。 因為數(shù)據(jù)塊緩

27、存區(qū)的大小固定, 并且其大小通常小于數(shù)據(jù)庫段所使用的空間, 所以它不能一 次裝載下內(nèi)存中所有的數(shù)據(jù)庫段。通常,數(shù)據(jù)塊緩存區(qū)只是數(shù)據(jù)庫大小的1%2%, Oracle使用最近最少使用(LRU , leastrecentlyused)算法來管理可用空間。當存儲區(qū)需要自由空間時,最近最少使用塊將被移出, 新數(shù)據(jù)塊將在存儲區(qū)代替它的位置。 通過這種方法, 將最頻繁使 用的數(shù)據(jù)保存在存儲區(qū)中。 然而,如果SGA 的大小不足以容納所有最常使用的數(shù)據(jù),那么,不同的對象將爭用數(shù)據(jù)塊緩存區(qū)中的空間。當多個應用程序共享同一個SGA 時,很有可能發(fā)生這種情況。此時,每個應用的最近使用段都將與其他應用的最近使用段爭奪S

28、GA 中的空間。其結果是,對數(shù)據(jù)塊緩存區(qū)的數(shù)據(jù)請求將出現(xiàn)較低的命中率,導致系統(tǒng)性能下降。 2)字典緩存區(qū) 數(shù)據(jù)庫對象的信息存儲在數(shù)據(jù)字典表中,這些信息包括用戶帳號數(shù)據(jù)、數(shù)據(jù)文件名、段名、 盤區(qū)位置、表說明和權限,當數(shù)據(jù)庫需要這些信息 (如檢查用戶查詢一個表的授權)時,將讀取數(shù)據(jù)字典表并且將返回的數(shù)據(jù)存儲在字典緩存區(qū)的 SGA 中。 數(shù)據(jù)字典緩存區(qū)通過最近最少使用 (LRU) 算法來管理。字典緩存區(qū)的大小由數(shù)據(jù)庫內(nèi)部管 理。字典緩存區(qū)是SQL 共享池的一部分,共享池的大小由數(shù)據(jù)庫文件init.ora 中的SHARED_POOL_SIZE 參數(shù)來設置。 如果字典緩存區(qū)太小, 數(shù)據(jù)庫就不得不反復查詢

29、數(shù)據(jù)字典表以訪問數(shù)據(jù)庫所需的信息, 這些 查詢稱為循環(huán)調用 (recuesivecall) ,這時的查詢速度相對字典緩存區(qū)獨立完成查詢時要低。 3)重做日志緩沖區(qū) 重做項描述對數(shù)據(jù)庫進行的修改。 它們寫到聯(lián)機重做日志文件中, 以便在數(shù)據(jù)庫恢復過程中 用于向前滾動操作。 然而, 在被寫入聯(lián)機重做日志文件之前, 事務首先被記錄在稱作重做日 志緩沖區(qū)(redologbuffer) 的 SGA 中。數(shù)據(jù)庫可以周期地分批向聯(lián)機重做日志文件中寫重做項的內(nèi)容,從而優(yōu)化這個操作。重做日志緩沖區(qū)的大小 ( 以字節(jié)為單位) 由 init.ora 文件中的LOG_BUFFER 參數(shù)決定。 4) SQL 共享池 SQ

30、L 共享池存儲數(shù)據(jù)字典緩存區(qū)及庫緩存區(qū)(librarycache) ,即對數(shù)據(jù)庫進行操作的語句信息。 當數(shù)據(jù)塊緩沖區(qū)和字典緩存區(qū)能夠共享數(shù)據(jù)庫用戶間的結構及數(shù)據(jù)信息時, 庫緩存區(qū)允 許共享常用的 SQL 語句。 SQL 共享池包括執(zhí)行計劃及運行數(shù)據(jù)庫的 SQL 語句的語法分析樹。 在第二次運行(由任何用戶 ) 相同的 SQL 語句時,可以利用 SQL 共享池中可用的語法分析信息來加快執(zhí)行速度。 SQL 共享池通過LRU 算法來管理。 當 SQL 共享池填滿時, 將從庫緩存區(qū)中刪掉最近最少使用的執(zhí)行路徑和語法分析樹,以便為新的條目騰出空間。如果SQL 共享池太小,語句將被連續(xù)不斷地再裝入到庫緩存

31、區(qū),從而影響操作性能。 SQL 共享池的大小(以字節(jié)為單位)由 init.ora 文件參數(shù) SHARED_POOL_SIZE 決定。5)大池 大池 (LargePool) 是一個可選內(nèi)存區(qū)。如果使用線程服務器選項或頻繁執(zhí)行備份/恢復操作,只要創(chuàng)建一個大池,就可以更有效地管理這些操作。大池將致力于支持SQL 大型命令。利用大池,就可以防止這些SQL 大型命令把條目重寫入 SQL 共享池中,從而減少再裝入到庫緩存區(qū)中的語句數(shù)量。大池的大小(以字節(jié)為單位)通過init.ora 文件的 LARGE_POOL_SIZE參數(shù)設置,用戶可以使用 init.ora 文件的 LARGE_POOL_MIN_ALL

32、OC 參數(shù)設置大池中的最小位置。 Oracle8i 已不用這個參數(shù)。作為使用 LargePool 的一種選擇方案,可以用 init.ora 文 件的 SHARED_POOL_RESERVED_SIZE 參數(shù)為 SQL 大型語句保留一部分SQL 共享池。6) Java 池由其名字可知, Java 池為 Java 命令提供語法分析。 Java 池的大小 ( 以字節(jié)為單位)通過在Oracle8i 引 入 的 init.ora 文 件 的 JAVA_POOL_SIZE 參 數(shù) 設 置 。 init.ora 文 件 的JAVA_POOL_SIZE 參數(shù)缺省設置為 10MB 。7)多緩沖池可以在 SGA

33、中創(chuàng)建多個緩沖池,能夠用多個緩沖池把大數(shù)據(jù)集與其他的應用程序分開,以減少它們爭奪數(shù)據(jù)塊緩存區(qū)內(nèi)相同資源的可能性。對于創(chuàng)建的每一個緩沖池,都要規(guī)定其LRU 鎖存器的大小和數(shù)量。緩沖區(qū)的數(shù)量必須至少比LRU 鎖存器的數(shù)量多 50 倍。創(chuàng)建緩沖池時,需要規(guī)定保存區(qū)(keeparea)的大小和再循環(huán)區(qū)(recyclearea)的大小。與SQL共 享池的保留區(qū)一樣,保存區(qū)保持條目,而再循環(huán)區(qū)則被頻繁地再循環(huán)使用??梢酝ㄟ^BUFFER_POOL_KEEP 參數(shù)規(guī)定來保存區(qū)的大小。例如:保存和再 循環(huán)緩沖池的容 量減少了數(shù)據(jù)塊 緩 沖存儲 區(qū)中的可用空間(通過DB_BLOCK_BUFFERS 參數(shù)設置)。對

34、于使用一個新緩沖池的表,通過表的storage 子句中的 buffer_pool 參數(shù)來規(guī)定緩沖池的名字。例如,如果需要從內(nèi)存中快速刪除一個表,就把 它賦予 RECYCLE 池。 缺省池叫作DEFAULT , 這樣就能在以后用 altertable 命令把一個表轉移到 DEFAULT 池。2.后臺進程(Backgroung Process)數(shù)據(jù)庫的物理結構與內(nèi)存結構之間的交互要通過后臺進程來完成。1、 DBWR 進程:該進程執(zhí)行將緩沖區(qū)寫入數(shù)據(jù)文件,是負責緩沖存儲區(qū)管理的一個Oracle后臺進程。 當緩沖區(qū)中的一緩沖區(qū)被修改, 它被標志為 “弄臟” , DBWR 的主要任務是將 “弄 臟”的緩

35、沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈” 。由于緩沖存儲區(qū)的緩沖區(qū)填入數(shù)據(jù)庫或被 用戶進程弄臟, 未用的緩沖區(qū)的數(shù)目減少。 當未用的緩沖區(qū)下降到很少, 以致用戶進程要從 磁盤讀入塊到內(nèi)存存儲區(qū)時無法找到未用的緩沖區(qū)時, DBWR 將管理緩沖存儲區(qū),使用戶 進程總可得到未用的緩沖區(qū)。Oracle 采用 LRU ( LEAST RECENTL Y USED )算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O 最小。在下列情況預示DBWR 要將弄臟的緩沖區(qū)寫入磁盤:當一個服務器進程將一緩沖區(qū)移入“弄臟”表, 該弄臟表達到臨界長度時,該服務進程將通知 DBWR 進行寫。該臨界長度是為參數(shù) D

36、B-BLOCK-WRITE-BATCH 的值的一半。當一個服務器進程在LRU 表中查找 DB-BLOCK-MAX-SCAN-CNT 緩沖區(qū)時,沒有查到未用的緩沖區(qū),它停止查找并通知 DBWR 進行寫。出現(xiàn)超時(每次3 秒) , DBWR 將通知本身。 當出現(xiàn)檢查點時, LGWR 將通知 DBWR. 在前兩種情況下, DBWR 將弄臟表中的塊寫入磁盤, 每次可寫的塊數(shù)由初始化參數(shù)DB-BLOCK- WRITE-BA TCH 所指定。 如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū), DBWR 從 LUR 表中查找另外一個弄臟緩沖區(qū)。如果 DBWR 在三秒內(nèi)未活動,則出現(xiàn)超時。在這種情況下DBWR 對 L

37、RU 表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫入磁盤。每當出現(xiàn)超時, DBWR 查找一個新的緩沖區(qū)組。每次由 DBWR 查找的緩沖區(qū)的數(shù)目是為寢化參數(shù) DB-BLOCK- WRITE-BA TCH 的值的二倍。如果數(shù)據(jù)庫空運轉, DBWR 最終將全部緩沖區(qū)存儲區(qū)寫入磁盤。在出現(xiàn)檢查點時, LGWR 指定一修改緩沖區(qū)表必須寫入到磁盤。 DBWR 將指定的緩沖區(qū)寫 入磁盤。在有些平臺上,一個實例可有多個DBWR. 在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數(shù)DB-WRITERS 控制 DBWR 進程個數(shù)。2、 LGWR 進程:該進程將日志緩沖區(qū)寫入磁盤上的一個日志文件,

38、它是負責管理日志緩沖區(qū)的一個 Oracle 后臺進程。 LGWR 進程將自上次寫入磁盤以來的全部日志項輸出, LGWR 輸出: 當用戶進程提交一事務時寫入一個提交記錄。每三秒將日志緩沖區(qū)輸出。 當日志緩沖區(qū)的1/3已滿時將日志緩沖區(qū)輸出。 當DBWR將修改緩沖區(qū)寫入磁盤時則將日志緩沖區(qū)輸出。LGWR 進程同步地寫入到活動的鏡象在線日志文件組。 如果組中一個文件被刪除或不可用,LGWR 可繼續(xù)地寫入該組的其它文件。日志緩沖區(qū)是一個循環(huán)緩沖區(qū)。當 LGWR 將日志緩沖區(qū)的日志項寫入日志文件后,服務器進程可將新的日志項寫入到該日志緩沖區(qū)。LGWR 通常寫得很快,可確保日志緩沖區(qū)總有空間可寫入新的日志

39、項。注意:有時候當需要更多的日志緩沖區(qū)時,LWGR 在一個事務提交前就將日志項寫出,而這些日志項僅當在以后事務提交后才永久化。ORACLE使用快速提交機制,當用戶發(fā)出COMMIT 語句時,一個COMMIT記錄立即放入日志緩沖區(qū),但相應的數(shù)據(jù)緩沖區(qū)改變是被延遲,直到在更有效時才將它們寫入數(shù)據(jù)文件。當一事務提交時,被賦給一個系統(tǒng)修改號(SCN) ,它同事務日志項一起記錄在日志中。由于 SCN 記錄在日志中,以致在并行服務器選項配置情況下,恢復操作可以同步。3、 CKPT 進程:該進程在檢查點出現(xiàn)時,對全部數(shù)據(jù)文件的標題進行修改,指示該檢查點。在通常的情況下,該任務由 LGWR 執(zhí)行。然而,如果檢查

40、點明顯地降低系統(tǒng)性能時,可使CKPT 進程運行, 將原來由 LGWR 進程執(zhí)行的檢查點的工作分離出來, 由 CKPT 進程實現(xiàn)。對于許多應用情況, CKPT 進程是不必要的。 只有當數(shù)據(jù)庫有許多數(shù)據(jù)文件, LGWR 在檢查點時明顯地降低性能才使CKPT 運行。 CKPT 進程不將塊寫入磁盤, 該工作是由 DBWR 完成的。初始化參數(shù)CHECKPOINT-PROCESS 控制 CKPT 進程的使能或使不能。缺省時為FALSE ,即為使不能。由于 Oracle 中 LGWR 和 DBWR 工作的不一致, Oracle 引入了檢查點的概念, 用于同步數(shù)據(jù)庫,保證數(shù)據(jù)庫的一致性。在Oracle 里面,

41、檢查點分為兩種:完全檢查點和增量檢查點。下面我們分別介紹這兩種檢查點的作用:1、完全檢查點在 Oracle8i 之前, 數(shù)據(jù)庫的發(fā)生的檢查點都是完全檢查點, 完全檢查點會將數(shù)據(jù)緩沖區(qū)里面所有的臟數(shù)據(jù)塊寫入相應的數(shù)據(jù)文件中, 并且同步數(shù)據(jù)文件頭和控制文件, 保證數(shù)據(jù)庫的一致。完全檢查點在8i 之后只有在下列兩種情況下才會發(fā)生:( 1)DBA 手工執(zhí)行 alter system checkpoint 的命令;(2)數(shù)據(jù)庫正常shutdown ( immediate,transcational,normal ) 。由于完全檢查點會將所有的臟數(shù)據(jù)庫塊寫入,巨大的 IO 往往會影響到數(shù)據(jù)庫的性能。因此O

42、racle 從 8i 開始引入了增量檢查點的概念。2、 增量檢查點Oracle 從 8i 開始引入了檢查點隊列這么一種概念,用于記錄數(shù)據(jù)庫里面當前所有的臟數(shù)據(jù)塊的信息, DBWR 根據(jù)這個隊列而將臟數(shù)據(jù)塊寫入到數(shù)據(jù)文件中。檢查點隊列按時間先后記錄著數(shù)據(jù)庫里面臟數(shù)據(jù)塊的信息,里面的條目包含 RBA (Redo Block Address ,重做日志里面用于標識檢查點期間數(shù)據(jù)塊在重做日志里面第一次發(fā)生更改的編號) 和數(shù)據(jù)塊的數(shù)據(jù)文件號和塊號。 在檢查點期間不論數(shù)據(jù)塊更改幾次, 它在檢查點隊列里面的位置始終保持不變,檢查點隊列也只會記錄它最早的 RBA ,從而保證最早更改的數(shù)據(jù)塊能夠盡快寫入。 當

43、DBWRCKPT將檢查點隊列里面的臟數(shù)據(jù)塊寫入到數(shù)據(jù)文件后,檢查點的位置也要相應地往后移,每三秒會在控制文件中記錄檢查點的位置,以表示Instance Recovery 時開始恢復的日志條目,這個概念稱為檢查點的“心跳” ( heartbeat) 。檢查點位置發(fā)生變更后,Oracle 里面通過4 個參數(shù)用于控制檢查點位置和最后的重做日志條目之間的距離。在這里面需要指出的是,多數(shù)人會將這4 個參數(shù)看作控制增量檢查點發(fā)生的時間。 事實上這是錯誤的, 這 4 個參數(shù)是用于控制檢查點隊列里面的條目數(shù)量,而不是控制檢查點的發(fā)生。( 1)fast_start_io_target該參數(shù)用于表示數(shù)據(jù)庫發(fā)生In

44、stance Recovery 的時候需要產(chǎn)生的 IO 總數(shù),它通過v$filestat的 AVGIOTIM 來估算的。比如我們一個數(shù)據(jù)庫在發(fā)生Instance Crash 后需要在 10 分鐘內(nèi)恢復完畢,假定OS 的 IO 每秒為 500 個,那么這個數(shù)據(jù)庫發(fā)生Instance Recovery 的時候大概將產(chǎn)生 500*10*60=30,000 次 IO ,也就是我們將可以把fast_start_io_target 設置為 30000。( 2)fast_start_mttr_target我們從上面可以看到 fast_start_io_target 來估算檢查點位置比較麻煩。 Oracle

45、為了簡化這個概念,從 9i 開始引入了 fast_start_mttr_target 這么一個參數(shù),用于表示數(shù)據(jù)庫發(fā)生InstanceRecovery 的時間,以秒為單位。這個參數(shù)我們從字面上也比較好理解,其中的 mttr 是 mean time to recovery 的簡寫,如上例中的情況我們可以將fast_start_mttr_target 設置為 600。當設置 了 fast_start_mttr_target 后 , fast_start_io_target 這 個 參 數(shù) 將 不 再 生 效 , 從 9i 后 fast_start_io_target 這個參數(shù)被Oracle 廢除了

46、。( 3)log_checkpoint_timeout該參數(shù)用于表示檢查點位置和重做日志文件末尾之間的時間間隔, 以秒為單位, 默認情況下 是 1800 秒。( 4)log_checkpoint_interval該參數(shù)是表示檢查點位置和重做日志末尾的重做日志塊的數(shù)量,以 OS 塊表示。( 5)90% OF SMALLEST REDO LOG除了以上 4 個初始化參數(shù)外, Oracle 內(nèi)部事實上還將重做日志文件末尾前面90% 的位置設為檢查點位置。 在每個重做日志中, 這么幾個參數(shù)指定的位置可能不盡相同, Oracle 將離日志 文件末尾最近的那個位置確認為檢查點位置。4、 SMON 進程:該

47、進程實例啟動時,執(zhí)行實例恢復,還負責清理不再使用的臨時段。在具有并行服務器選項的環(huán)境下, SMON 對有故障 CPU 或實例進行實例恢復。 SMON 進程有規(guī)律地被呼醒,檢查是否需要,或者其它進程發(fā)現(xiàn)需要時可以被調用。5、 PMON 進程:該進程在用戶進程出現(xiàn)故障時執(zhí)行進程恢復,負責清理內(nèi)存儲區(qū)和釋放該進程所使用的資源。例:它要重置活動事務表的狀態(tài),釋放封鎖,將該故障的進程的 ID 從活動進程表中移去。 PMON 還周期地檢查調度進程( DISPATCHER )和服務器進程的狀態(tài),如果已死,則重新啟動(不包括有意刪除的進程) 。PMON 有規(guī)律地被呼醒,檢查是否需要,或者其它進程發(fā)現(xiàn)需要時可以被調用。6、 RECO 進程:該進程是在具有分布式選項時所使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論