Oracle數(shù)據(jù)庫空間的使用及其管理_第1頁
Oracle數(shù)據(jù)庫空間的使用及其管理_第2頁
Oracle數(shù)據(jù)庫空間的使用及其管理_第3頁
Oracle數(shù)據(jù)庫空間的使用及其管理_第4頁
Oracle數(shù)據(jù)庫空間的使用及其管理_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一篇比較不錯的文章,然而比較長,呵呵看你有沒有耐心了! 數(shù)據(jù)庫空間的有效使用和維護不僅是數(shù)據(jù)庫治理的重要工作,也是大多數(shù)開發(fā)人員所關(guān)懷的內(nèi)容,因為它直接關(guān)系到數(shù)據(jù)庫性能的發(fā)揮。同時數(shù)據(jù)碎片是經(jīng)常令人頭疼的問題,碎片不僅造成空間的白費,更重要的是會直接阻礙應 用程序的響應速度。 Oracle提供了許多方法用于數(shù)據(jù)空間的使用、監(jiān)控和維護,同時也在各版本中陸續(xù)對這方面的功能進行了增強,目的在于簡化這方面工作的復雜度,提高應用的運行效率。 本文希望通過系統(tǒng)地介紹這方面的有關(guān)概念,讓大伙兒能更好地規(guī)劃使用數(shù)據(jù)空間,正確使用Oracle提供的有關(guān)功能特性,提高應用的執(zhí)行效率。 一、有關(guān)概念 數(shù)據(jù)庫的空間在

2、邏輯上分為多個表空間,每個表空間則由系統(tǒng)中的一個或多個物理數(shù)據(jù)文件構(gòu)成;Oracle存儲數(shù)據(jù)的差不多單位是塊,其大小在建庫時由 DB_BLOCK_SIZE參數(shù)確定,一個或多個連續(xù)的塊構(gòu)成一個區(qū)片(EXTENT),它作為數(shù)據(jù)對象存儲的差不多單位來使用。在Oracle中,每個基 本數(shù)據(jù)對象使用的空間稱為段(Segment),段存放在唯一的表空間上,每個段實際上是一系列區(qū)片(更為準確地是數(shù)據(jù)塊)的集合。每個簡單數(shù)據(jù)對象對應 一個段;關(guān)于分區(qū)對象如分區(qū)表、索引,則每個(子)分區(qū)對應一個段,由各個(子)分區(qū)共同構(gòu)成一個完整的數(shù)據(jù)對象。因此,能夠把表空間看作桶,里面放著許 多段;一個段只能放在一個桶中,而

3、不能跨越多個桶。 二、表空間的使用 表空間碎片的產(chǎn)生 由于同一個表空間中存放有多個數(shù)據(jù)段,各個數(shù)據(jù)段能夠有不同的區(qū)片尺寸,不同段的區(qū)片能夠交叉存放;當這些段中的區(qū)片通過分配(如創(chuàng)建表)、釋放 (如刪除表)后,就可能使表空間中原本連續(xù)的空閑數(shù)據(jù)塊變成不連續(xù),而區(qū)片必須由連續(xù)的數(shù)據(jù)塊構(gòu)成,這時,當某一段需要分配新的區(qū)片時,就有可能出現(xiàn)盡管 表空間空閑數(shù)據(jù)塊的總和大于所需區(qū)片的大小,但卻無法找到一串連續(xù)的塊來供此區(qū)片分配使用。這種情況就稱為表空間的Extent Fragmentation。我們經(jīng)常會遇到這種情況,明明從DBA_FREE_SPACE中計算表空間還有幾百MB,但其中的某一個表卻無法再擴展

4、幾個 MB的空間。 消除表空間碎片 Oracle在段的區(qū)片分配上為用戶提供了專門大的靈活性,然而假如未能正確使用創(chuàng)建表空間和數(shù)據(jù)對象的各個可選擇參數(shù),則在最后將不可幸免的要面 對區(qū)片碎片的問題。Oracle 的Bhaskar Himatsingka 和 Juan Loaiza,為此提出了SAFE(Simple Algorithm for Fragmentation Elimination.)配制規(guī)則,通過遵循這套規(guī)則,區(qū)片級碎片能夠完全的幸免。而實際上,Oracle8i引入的新特性:Local Managed Tablespace確實是SAFE規(guī)則在Oracle Server的內(nèi)置實現(xiàn)。SAF

5、E原則概括起來包括: 1. 對每個表空間上的段使用相同的區(qū)片尺寸;段參數(shù)INITIALNEXT,PCTINCREASE0;能夠通過使用Create Tablespace 的 MINIMUM EXTENT 子句來確保分配的區(qū)片是此參數(shù)的倍數(shù); 2. 僅在表空間級指定INITIAL、NEXT參數(shù),在創(chuàng)建數(shù)據(jù)段時不要指定這些參數(shù); 3. 區(qū)片的大小依照段大小來確定,原則是均衡順序掃描的效率和空間的利用率,同時確保段的區(qū)片數(shù)目操縱在1024之下;依照此原則,在進行相應測試之后,確定以下區(qū)片選取規(guī)則: 段大?。∣racle7) 區(qū)片大小(Oracle7) 段大?。∣racle8) 區(qū)片大?。∣racle

6、8) &160M 160K &128M 128K 160M-5G 5M 128M-4G 4M &5G 160M &4G 128M 有此數(shù)據(jù)庫中能夠只使用三種區(qū)片大小的表空間;在對象創(chuàng)建之前需對其大小進行評估,并放到相應的表空間中; 4. Oracle815引入了本地治理表空間,它在治理和性能上都優(yōu)于傳統(tǒng)的字典治理表空間,它已融合了規(guī)則1、2、3 ;要使用此特性,在CREATE TABLESPACE語句中指定EXTENT MANAGEMENT LOCAL子句; 5. 段的區(qū)片數(shù)目上限應在4096之下,DML操作在此區(qū)片數(shù)目范圍內(nèi)可不能有明顯的性能差異;但某些DDL操作的速度則與區(qū)片的數(shù)目關(guān)系較大

7、;因此合理的區(qū)片數(shù)目應保持在1024之下;關(guān)于持續(xù)不斷擴展的段,應監(jiān)控區(qū)片數(shù)目,在必要時移至其它表空間; 6. 關(guān)于特不大的數(shù)據(jù)段應操縱在4G128G(Oracle7為5G160G)之間,它們應存放到單獨的表空間上,同時關(guān)于這些特大段應考慮使用分區(qū)拉提高性能; 7. 用戶的臨時表空間應使用TEMPORARY類型; 8. 當系統(tǒng)的事務(wù)規(guī)模比較均衡時能夠?qū)貪L段使用OPTIMAL參數(shù),否則應幸免制定OPTIMAL參數(shù),而定期監(jiān)控回滾段的大小,并在必要時重建; 9. 臨時段和回滾段絕對不要將用戶數(shù)據(jù)存放到SYSTEM表空間,它是專為永久可不能Drop和Truncate的系統(tǒng)數(shù)據(jù)對象而設(shè)計的; 10.

8、 創(chuàng)建表空間時指定數(shù)據(jù)文件的大小應區(qū)片整數(shù)倍1數(shù)據(jù)塊,關(guān)于Local Managed Tablespace則為區(qū)片整數(shù)倍64K; 11. 當表空間使用統(tǒng)一的區(qū)片大小時,不要對其進行空間整理,重整的結(jié)果不僅耗費精力而且可能會使性能變差;關(guān)于未使用統(tǒng)一的區(qū)片尺寸的表空間應通過Export/Import重整; 12. 8i 提供了Alter Table Move Tablespace命令可用于快速重整表,Alter Index RebuildTablespace 命令可用于快速重建索引; 有關(guān)使用單個區(qū)片的誤導 在許多關(guān)于碎片整理的文檔中建議在Export時使用CompressY選項,將表中的所有數(shù)

9、據(jù)調(diào)整到一個區(qū)片中,期望在Import后獲得良 好性能。由此讓許多人產(chǎn)生一個觀點,認為當表中數(shù)據(jù)全部存放到一個區(qū)片中時,能夠獲得良好性能。實際上單區(qū)片段只在以下條件成立時,才具有優(yōu)越性: 數(shù)據(jù)要緊以(全段)掃描方式訪問; 段所對應的數(shù)據(jù)塊在物理磁盤上連續(xù)存放,Oracle能夠公布較大的順序磁盤讀操作; 通過對這兩條進行分析能夠發(fā)覺,一方面數(shù)據(jù)庫中大部分表是通過索引來訪問,另一方面現(xiàn)在的數(shù)據(jù)庫文件一般在物理上使用了RAID5或RAID0 1技術(shù),數(shù)據(jù)以條帶化方式分布到多個物理磁盤上,邏輯上的單個區(qū)片和多區(qū)片在物理上并無本質(zhì)上的區(qū)不;另外,從Oracle的角度來看,治理幾百個區(qū)片的 段是特不輕松的

10、并可不能有性能的下降。由此可見將整個段放到一個區(qū)片中并無明顯好處,而這種做法卻會導致表空間碎片的產(chǎn)生。 三、表數(shù)據(jù)段的使用 表空間的組織 Heap表的空間由一系列區(qū)片鏈接而成,每個數(shù)據(jù)塊除塊頭外其余部分可用于存放數(shù)據(jù),在創(chuàng)建表時能夠指定以下參數(shù): PCTFREE:塊中保留用于UPDATE操作的空間百分比,當數(shù)據(jù)占用的空間達到此上限時,新的數(shù)據(jù)將不能再插入到此塊中; PCTUSED:指定塊中數(shù)據(jù)使用空間的最低百分比;當一個塊在達到PCTFREE,之后經(jīng)歷了一些DELETE操作,在其空間使用下降到PCTUSED后便能夠重新被用于INSERT數(shù)據(jù);這確實是PCTFREE/PCTUSED參數(shù)的含義;

11、調(diào)整PCTFREE、PCTUSED參數(shù)的目標一方面是提高性能,另一方面則要緊是提高空間使用效率,幸免出現(xiàn)塊中存在有許多未用的空間,但卻無法找到一個塊能夠被用于插入新數(shù)據(jù)行的情況發(fā)生。 PCTFREE的使用 在Oracle中表的每一行數(shù)據(jù)由唯一的ROWID標記;而Oracle支持的數(shù)據(jù)類型中有一些長度是可變的,如VARCHAR,當對這些數(shù)據(jù)進 行UPDATE時,假如塊中的可用空間不能容納UPDATE后的數(shù)據(jù)行時,Oracle將會把此行移到其它數(shù)據(jù)塊,同時保留此數(shù)據(jù)行的ROWID不變,并 在原有塊中建一指針指向行遷移后的位置。在這種情況下讀取一行數(shù)據(jù)將需要訪問2個數(shù)據(jù)塊,從而導致性能下降。PCTF

12、REE保留的空間確實是為確保更改后的 數(shù)據(jù)行能夠仍存放于原有數(shù)據(jù)塊中,幸免行遷移的情況發(fā)生。 由此,假如PCTFREE設(shè)置不足時可能產(chǎn)生行遷移;而另一方面假如PCTFREE設(shè)置過高,將會造成空間白費。因此正確設(shè)置PCTFREE需要 對表中數(shù)據(jù)的使用進行分析。關(guān)于數(shù)據(jù)長度可不能變化或極少更新的情況,能夠采納較小的PCTFREE;關(guān)于其它大多數(shù)情況應采納稍大的PCTFREE (PCTFREE的缺省值是10,假如不行可能需預留的空間,能夠使用1525的范圍),不要為節(jié)約塊中的空間而使用較小的PCTFREE值。 PCTUSED的使用 當塊的使用的空間下降到PCTUSED后,此塊被重新放回空閑鏈表(Fr

13、eelist)中,作為后續(xù)Insert的候選塊。同樣,設(shè)置 PCTUSED需要視數(shù)據(jù)行的特性和Insert、Update、Delete的模式而定,但必須遵守的原則是:db_block_size * (100 - PCTFREE - PCTUSED)必須比行的長度大。 關(guān)于數(shù)據(jù)行長度變化較大的情況,應使用最大行長度來計算PCTUSED,同時應使用較低的PCTUSED值。因為在執(zhí)行Insert時,假如數(shù)據(jù) 塊的可用空間不能裝下一行數(shù)據(jù),當塊的使用的空間是在PCTUSED之上,Oracle將把此塊從Freelist中移走;當塊的使用的空間是在 PCTUSED之下,Oracle將會擴展段空間。因此,P

14、CTUSED假如設(shè)得過高,將導致段的不斷擴展。 當數(shù)據(jù)行長度不大時,使用缺省的PCTUSED(40)是比較合適的;關(guān)于行長度較大的情況,最長的行有可能會占用半個以上的塊空間,現(xiàn)在可設(shè)置 PCTUSED為10。較小的PCTUSED僅在表中的數(shù)據(jù)以隨機方式被刪除,而且仍有一些行長時刻保留在塊中時,才會造成空間使用上的問題,因為這些塊 可能需要較長的時刻才能或永久不能重新被用于存放新數(shù)據(jù)。在這種應用中,假如空間利用率一直處于較低水平,則需對PCTUSED進行分析和調(diào)整。 總的講來,能夠使用以下公式來計算PCTUSED(結(jié)果為負數(shù)時取1): PCTUSED = 100 - PCTFREE - max(

15、10, (maximum-row-size/ blocksize)*100); PCTFREE、PCTUSED在各種應用場合的選取原則 以Insert為主的應用:小的PCTFREE,缺省的PCTUSED; 以Update為主的應用:依照行長度的變化范圍來確定PCTFREE,PCTUSED使用缺省值; Insert后不久Delete:采納小的PCTFREE,特不小的PCTUSED; 隨機Insert/Delete:依照行大小,使用上面的建議來設(shè)置; 使用Oracle8的分區(qū)技術(shù)來提高空間使用率 Oracle8中的表分區(qū)功能可用于歷史性數(shù)據(jù)的應用場合,可使用時刻或其它序列編號作為分區(qū)鍵,當舊的歷史

16、數(shù)據(jù)被刪除后,表中剩下的數(shù)據(jù)仍可保持較緊湊的存放狀態(tài)。 四、B*Tree索引段的使用 Btree索引段的結(jié)構(gòu) Btree索引段使用二叉樹結(jié)構(gòu)來組織和存放。典型的索引樹由3層結(jié)構(gòu)組成:根結(jié)點塊存放指針指向分支節(jié)點數(shù)據(jù)塊,分支節(jié)點塊存放指針指向葉 節(jié)點,葉節(jié)點塊存放真正的索引鍵值和對應數(shù)據(jù)行的ROWID。然而,最簡單的索引段能夠只有一個塊:既是根結(jié)點又是葉節(jié)點,而龐大的索引能夠有4層以上 的結(jié)構(gòu)。與表中的一行數(shù)據(jù)能夠存放到任何空閑的數(shù)據(jù)塊中不同,在二叉樹的數(shù)據(jù)結(jié)構(gòu)中,每個鍵的值將唯一確定它存放的葉節(jié)點位置;因此相關(guān)于常規(guī)表的鏈表數(shù) 據(jù)塊組織形式,索引段具有更為嚴格的數(shù)據(jù)結(jié)構(gòu),這也是索引段結(jié)構(gòu)在DM

17、L操作中更容易變形的根源。 索引數(shù)據(jù)修改的細節(jié) a) Insert: 索引數(shù)據(jù)依照鍵值插入到相應葉節(jié)點中。假如葉節(jié)點空間已滿,將創(chuàng)建新的葉節(jié)點數(shù)據(jù)塊,它稱為葉節(jié)點的split,現(xiàn)在又分為兩種情況:假如鍵值位 于索引樹的最尾部,則新葉節(jié)點只存放插入的新鍵值,它稱為991分裂,否則將執(zhí)行葉節(jié)點的5050分裂,即新塊和舊塊各存放原有50的索引數(shù)據(jù)。 b) Delete: 刪除釋放的空間可用于以后相應鍵值插入使用。單索引塊中的數(shù)據(jù)完全被刪除后,此塊放入空閑鏈表,能夠用于今后索引的split,但并不立即從索引樹中刪除,只有當此塊在索引樹的其它位置被重新使用時,它才會從原有位置上刪除并移到新位置上。 c)

18、 Update: 索引中沒有Update的操作,對鍵值的修改將對應到索引中的DeleteInsert操作。 創(chuàng)建索引的有關(guān)參數(shù) PCTFREE: 與表的PCTFREE不同,它只在索引創(chuàng)建時有效,在以后的插入操作中,此參數(shù)將不再起作用,索引數(shù)據(jù)能夠充滿整個數(shù)據(jù)塊。因此關(guān)于在已有一定數(shù)據(jù)的表上創(chuàng)建索引同時索引創(chuàng)建后存在隨機的Insert、Update操作時,指定此參數(shù)才有意義。 INITTRANS: 指定初始分配給葉節(jié)點塊的事務(wù)項槽數(shù),每個事務(wù)(transaction)需要分配一個事務(wù)槽(slot);它應等于葉節(jié)點塊可能的并發(fā)事務(wù)數(shù)。當塊中還有空間且事務(wù)槽不夠用時,Oracle會進行動態(tài)擴展。 MAXTRANS: 指定在葉節(jié)點中同意分配事務(wù)槽的最大值;它用于防止大量突發(fā)的并發(fā)事務(wù)占用過多的葉節(jié)點空間。 索引使用上的考慮

溫馨提示

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

評論

0/150

提交評論