



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
一篇比較不錯的文章,但是比較長,呵呵看你有沒有耐心了!數據庫空間的有效使用和保護不僅是數據庫治理的重要工作,也是大多數開發人員所關心的內容,因為它直接關系到數據庫性能的發揮。同時數據碎片是經常令人頭疼的問題,碎片不僅造成空間的浪費,更重要的是會直接影響應用程序的響應速度。Oracle提供了不少方法用于數據空間的使用、監控和保護,同時也在各版本中陸續對這方面的功能進行了增強,目的在于簡化這方面工作的復雜度,提高應用的運行效率。本文希望通過系統地介紹這方面的有關概念,讓大家能更好地規劃使用數據空間,正確使用Oracle提供的有關功能特性,提高應用的執行效率。一、有關概念數據庫的空間在邏輯上分為多個表空間,每個表空間那么由系統中的一個或多個物理數據文件構成;Oracle存儲數據的根本單位是塊,其大小在建庫時由DB_BLOCK_SIZE參數確定,一個或多個連續的塊構成一個區片〔EXTENT〕,它作為數據對象存儲的根本單位來使用。在Oracle中,每個基本數據對象使用的空間稱為段〔Segment〕,段存放在唯一的表空間上,每個段實際上是一系列區片〔更為準確地是數據塊〕的集合。每個簡單數據對象對應一個段;對于分區對象如分區表、索引,那么每個〔子〕分區對應一個段,由各個〔子〕分區共同構成一個完整的數據對象。因此,可以把表空間看作桶,里面放著許多段;一個段只能放在一個桶中,而不能跨越多個桶。二、表空間的使用表空間碎片的產生由于同一個表空間中存放有多個數據段,各個數據段可以有不同的區片尺寸,不同段的區片可以交叉存放;當這些段中的區片經過分配〔如創立表〕、釋放〔如刪除表〕后,就可能使表空間中原本連續的空閑數據塊變成不連續,而區片必須由連續的數據塊構成,這時,當某一段需要分配新的區片時,就有可能出現雖然表空間空閑數據塊的總和大于所需區片的大小,但卻無法找到一串連續的塊來供此區片分配使用。這種情況就稱為表空間的ExtentFragmentation。我們經常會遇到這種情況,明明從DBA_FREE_SPACE中計算表空間還有幾百MB,但其中的某一個表卻無法再擴展幾個MB的空間。消除表空間碎片Oracle在段的區片分配上為用戶提供了很大的靈活性,然而如果未能正確使用創立表空間和數據對象的各個可選擇參數,那么在最后將不可防止的要面對區片碎片的問題。Oracle的BhaskarHimatsingka和JuanLoaiza,為此提出了SAFE〔SimpleAlgorithmforFragmentationElimination.〕配制規那么,通過遵循這套規那么,區片級碎片可以完全的防止。而實際上,Oracle8i引入的新特性:LocalManagedTablespace就是SAFE規那么在OracleServer的內置實現。SAFE原那么概括起來包括:1.對每個表空間上的段使用相同的區片尺寸;段參數INITIAL=NEXT,PCTINCREASE=0;可以通過使用CreateTablespace的‘MINIMUMEXTENT’子句來確保分配的區片是此參數的倍數;2.僅在表空間級指定INITIAL、NEXT參數,在創立數據段時不要指定這些參數;3.區片的大小根據段大小來確定,原那么是均衡順序掃描的效率和空間的利用率,同時確保段的區片數目控制在1024之下;根據此原那么,在進行相應測試之后,確定以下區片選取規那么:段大小〔Oracle7〕區片大小〔Oracle7〕段大小〔Oracle8〕區片大小〔Oracle8〕&160M160K&128M128K160M-5G5M128M-4G4M&5G160M&4G128M有此數據庫中可以只使用三種區片大小的表空間;在對象創立之前需對其大小進行評估,并放到相應的表空間中;4.Oracle815引入了本地治理表空間,它在治理和性能上都優于傳統的字典治理表空間,它已融合了規那么1、2、3;要使用此特性,在CREATETABLESPACE語句中指定EXTENTMANAGEMENTLOCAL子句;5.段的區片數目上限應在4096之下,DML操作在此區片數目范圍內不會有明顯的性能差異;但某些DDL操作的速度那么與區片的數目關系較大;因此合理的區片數目應保持在1024之下;對于持續不斷擴展的段,應監控區片數目,在必要時移至其它表空間;6.對于特別大的數據段應控制在4G-128G〔Oracle7為5G-160G〕之間,它們應存放到單獨的表空間上,同時對于這些特大段應考慮使用分區拉提高性能;7.用戶的暫時表空間應使用TEMPORARY類型;8.當系統的事務規模比較均衡時可以對回滾段使用OPTIMAL參數,否那么應防止制定OPTIMAL參數,而定期監控回滾段的大小,并在必要時重建;9.暫時段和回滾段絕對不要將用戶數據存放到SYSTEM表空間,它是專為永遠不會Drop和Truncate的系統數據對象而設計的;10.創立表空間時指定數據文件的大小應=區片整數倍+1數據塊,對于LocalManagedTablespace那么為區片整數倍+64K;11.當表空間使用統一的區片大小時,不要對其進行空間整理,重整的結果不僅消耗精力而且可能會使性能變差;對于未使用統一的區片尺寸的表空間應通過Export/Import重整;12.8i提供了AlterTable…Move[Tablespace…]命令可用于快速重整表,AlterIndex…Rebuild…[Tablespace…]命令可用于快速重建索引;有關使用單個區片的誤導在許多關于碎片整理的文檔中建議在Export時使用Compress=Y選項,將表中的所有數據調整到一個區片中,期望在Import后獲得良好性能。由此讓許多人產生一個觀點,認為當表中數據全部存放到一個區片中時,可以獲得良好性能。實際上單區片段只在以下條件成立時,才具有優越性:數據主要以〔全段〕掃描方式訪問;段所對應的數據塊在物理磁盤上連續存放,Oracle可以發布較大的順序磁盤讀操作;通過對這兩條進行分析可以發現,一方面數據庫中大局部表是通過索引來訪問,另一方面現在的數據庫文件一般在物理上使用了RAID5或RAID0+1技術,數據以條帶化方式分布到多個物理磁盤上,邏輯上的單個區片和多區片在物理上并無本質上的區別;另外,從Oracle的角度來看,治理幾百個區片的段是非常輕松的并不會有性能的下降。由此可見將整個段放到一個區片中并無明顯好處,而這種做法卻會導致表空間碎片的產生。三、表數據段的使用表空間的組織Heap表的空間由一系列區片鏈接而成,每個數據塊除塊頭外其余局部可用于存放數據,在創立表時可以指定以下參數:PCTFREE:塊中保存用于UPDATE操作的空間百分比,當數據占用的空間到達此上限時,新的數據將不能再插入到此塊中;PCTUSED:指定塊中數據使用空間的最低百分比;當一個塊在到達PCTFREE,之后經歷了一些DELETE操作,在其空間使用下降到PCTUSED后便可以重新被用于INSERT數據;這就是PCTFREE/PCTUSED參數的含義;調整PCTFREE、PCTUSED參數的目標一方面是提高性能,另一方面那么主要是提高空間使用效率,防止出現塊中存在有許多未用的空間,但卻無法找到一個塊可以被用于插入新數據行的情況發生。PCTFREE的使用在Oracle中表的每一行數據由唯一的ROWID標記;而Oracle支持的數據類型中有一些長度是可變的,如VARCHAR,當對這些數據進行UPDATE時,如果塊中的可用空間不能容納UPDATE后的數據行時,Oracle將會把此行移到其它數據塊,同時保存此數據行的ROWID不變,并在原有塊中建一指針指向行遷移后的位置。在這種情況下讀取一行數據將需要訪問2個數據塊,從而導致性能下降。PCTFREE保存的空間就是為確保更改后的數據行可以仍存放于原有數據塊中,防止行遷移的情況發生。由此,如果PCTFREE設置缺乏時可能產生行遷移;而另一方面如果PCTFREE設置過高,將會造成空間浪費。因此正確設置PCTFREE需要對表中數據的使用進行分析。對于數據長度不會變化或極少更新的情況,可以摘用較小的PCTFREE;對于其它大多數情況應摘用稍大的PCTFREE〔PCTFREE的缺省值是10,如果不好估量需預留的空間,可以使用15-25的范圍〕,不要為節約塊中的空間而使用較小的PCTFREE值。PCTUSED的使用當塊的使用的空間下降到PCTUSED后,此塊被重新放回空閑鏈表〔Freelist〕中,作為后續Insert的候選塊。同樣,設置PCTUSED需要視數據行的特性和Insert、Update、Delete的模式而定,但必須遵守的原那么是:db_block_size*(100-PCTFREE-PCTUSED)必須比行的長度大。對于數據行長度變化較大的情況,應使用最大行長度來計算PCTUSED,并且應使用較低的PCTUSED值。因為在執行Insert時,如果數據塊的可用空間不能裝下一行數據,當塊的使用的空間是在PCTUSED之上,Oracle將把此塊從Freelist中移走;當塊的使用的空間是在PCTUSED之下,Oracle將會擴展段空間。因此,PCTUSED如果設得過高,將導致段的不斷擴展。當數據行長度不大時,使用缺省的PCTUSED〔40〕是比較適宜的;對于行長度較大的情況,最長的行有可能會占用半個以上的塊空間,此時可設置PCTUSED為10。較小的PCTUSED僅在表中的數據以隨機方式被刪除,而且仍有一些行長時間保存在塊中時,才會造成空間使用上的問題,因為這些塊可能需要較長的時間才能或永遠不能重新被用于存放新數據。在這種應用中,如果空間利用率一直處于較低水平,那么需對PCTUSED進行分析和調整??偟恼f來,可以使用以下公式來計算PCTUSED〔結果為負數時取1〕:PCTUSED=100-PCTFREE-max(10,(maximum-row-size/blocksize)*100);PCTFREE、PCTUSED在各種應用場合的選取原那么以Insert為主的應用:小的PCTFREE,缺省的PCTUSED;以Update為主的應用:根據行長度的變化范圍來確定PCTFREE,PCTUSED使用缺省值;Insert后不久Delete:摘用小的PCTFREE,非常小的PCTUSED;隨機Insert/Delete:根據行大小,使用上面的建議來設置;使用Oracle8的分區技術來提高空間使用率Oracle8中的表分區功能可用于歷史性數據的應用場合,可使用時間或其它序列編號作為分區鍵,當舊的歷史數據被刪除后,表中剩下的數據仍可保持較緊湊的存放狀態。四、B*Tree索引段的使用Btree索引段的結構Btree索引段使用二叉樹結構來組織和存放。典型的索引樹由3層結構組成:根結點塊—存放指針指向分支節點數據塊,分支節點塊-存放指針指向葉節點,葉節點塊-存放真正的索引鍵值和對應數據行的ROWID。然而,最簡單的索引段可以只有一個塊:既是根結點又是葉節點,而龐大的索引可以有4層以上的結構。與表中的一行數據可以存放到任何空閑的數據塊中不同,在二叉樹的數據結構中,每個鍵的值將唯一確定它存放的葉節點位置;因此相對于常規表的鏈表數據塊組織形式,索引段具有更為嚴格的數據結構,這也是索引段結構在DML操作中更容易變形的根源。索引數據修改的細節a)Insert:索引數據根據鍵值插入到相應葉節點中。如果葉節點空間已滿,將創立新的葉節點數據塊,它稱為葉節點的split,此時又分為兩種情況:如果鍵值位于索引樹的最尾部,那么新葉節點只存放插入的新鍵值,它稱為99-1分裂,否那么將執行葉節點的50-50分裂,即新塊和舊塊各存放原有50%的索引數據。b)Delete:刪除釋放的空間可用于以后相應鍵值插入使用。單索引塊中的數據完全被刪除后,此塊放入空閑鏈表,可以用于將來索引的split,但并不立刻從索引樹中刪除,只有當此塊在索引樹的其它位置被重新使用時,它才會從原有位置上刪除并移到新位置上。c)Update:索引中沒有Update的操作,對鍵值的修改將對應到索引中的Delete+Insert操作。創立索引的有關參數PCTFREE:與表的PCTFREE不同,它只在索引創立時有效,在以后的插入操作中,此參數將不再起作用,索引數據可以充滿整個數據塊。因此對于在已有一定數據的表上創立索引并且索引創立后存在隨機的Insert、Update操作時,指定此參數才有意義。INITTRANS:指定初始分配給葉節點塊的事務項槽數,每個事務〔transaction〕需要分配一個事務槽〔slot〕;它應等于葉節點塊可能的并發事務數。當塊中還有空間且事務槽不夠用時,Oracle會進行動態擴展。MAXTRANS:指定在葉節點中允許分配事務槽的最大值;它用于防止大量突發的并發事務占用過多的葉節點空間。索引使用上的考
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司組織業余活動方案
- 公司組合活動策劃方案
- 公司活動宣傳策劃方案
- 2025年心理學研究生入學考試試卷及答案
- 2025年全球化與國際關系研究生入學考試題及答案
- 2025年科學傳播專業研究生入學考試試題及答案
- 2025年礦業工程與安全管理考試題及答案
- 2025年翻譯與口譯專業資格考試試卷及答案
- 2024年度浙江省護師類之主管護師考前沖刺試卷B卷含答案
- 2024年度浙江省二級造價工程師之建設工程造價管理基礎知識模擬預測參考題庫及答案
- 哮喘的治療與護理講課件
- 部編版語文五年級下冊全冊復習知識匯-總
- 采購預付款合同
- 2023年瀘州市文化和旅游系統事業單位招聘筆試模擬試題及答案
- 醫療器械行業市場部人員崗位職責
- (中醫內科)高級、副高級職稱考試模擬試題及答案
- 跌倒墜床原因分析預防措施
- 弱電施工安全技術交底
- DB21T 3354-2020 遼寧省綠色建筑設計標準
- 安全生產知識應知應會
- 體育器材采購設備清單
評論
0/150
提交評論