1. 程式人生 > >ORACLE表空間、段、區的管理方式

ORACLE表空間、段、區的管理方式

一、 ORACLE表空間管理

        ORACLE通過表空間為資料庫提供使用空間。由於區(extent)是ORACLE建立物件時的最小分配單元, 所以表空間的管理實際上就是針對於區間的管理。 

        ORACLE表空間的管理方式分為:

         1.1 字典管理方式(DMT):

               使用資料字典管理儲存空間的分配, 當表空間分配新的區, 或者回收已分配的區時, ORACLE會對資料字典對應的表進行查詢、更新, 且使用單執行緒, 速度慢, 並且產生回退和重做資訊。

         1.2 本地管理方式(LMT):

               表空間中區分配和區回收的管理資訊都被儲存在表空間的資料檔案中, 而與資料字典無關。表空間為每個資料檔案維護一個位圖結構, 用於記錄表空間的區分配情況。 當表空間分配新的區, 或者回收已分配的區時, ORACLE會對檔案中的點陣圖進行更新, 所以不會產生回滾和重做資訊。

               優點:  a) 提高儲存管理的速度和併發性。 b) 不產生磁碟碎片。 c) 不產生遞迴管理。 d) 沒有系統回滾段。

二、 ORACLE段管理

        ORACLE以區為單位將空間分配給物件段, 而段內則是以BLOCK為單位進行空間使用和管理

        ORACLE段的管理分為:

         2.1 手動段空間管理(Manual Segment Space Management):

               手動設定FressLists、FreeList Groups、PctUsed、其它引數來控制如何分配、使用、重用段空間。 許多版本都支援MSSM。

         2.2 自動段空間管理(Automatic Segment Space Management)

               只需要控制與空間使用相關的PctFree, 其它引數被忽略。 ASSM只有在9i版本後才被引入, 用於減少MSSM中的太多引數的管理。

                應用於ASSM段的儲存設定只有Buffer_Pool、PctFree、IniTrans、MaxTrans(10g後的版本都會忽略這個引數), 其它儲存和物理屬性引數都不適用於ASSM段。

         2.3 HWM高水平線

               HWM是隨著表資料的增長而增長的, 只有重建、截除、收縮物件時, HWM才會降低。 HWM很重要, 因為在ORACLE進行全表掃描時會掃描HWM下的所有塊, 即使這張資料庫表不包含任何資料。

               TRUNCATE會把表的HWM重新置為0, 還會截除表上的相關索引, 而DELETE整張表時沒有修改HWM, 所以如果打算刪除表的所有行, 應儘量使用TRUNCATE。

               在MSSM表空間中, 段只有一個HWM。 但在ASSM表空間中, 除了HWM外, 還有一個低HWM。 這是因為在ASSM中, HWM推進時, ORACLE並沒有立即格式化所有的物理塊, 而是隻在第一次使用時才會完成格式化, 以便安全讀取(這裡有些疑問???)。

          2.4 freelists

                freelists 是使用MSSM表空間時, ORACLE使用塊時,需要把塊放在freelist或從fresslist中刪除, fresslists可能對效能有很大的提升或有很大的影響。

                而在ASSM中, 沒有也不用去設定freelist引數。

                create tablespace assm datafile size 10m autoextend on next 1m segment space management auto ;

                create table xxx tablespace assm ;

          2.5 pctfree與pctused(同樣存在疑問???)

                PctFree告訴ORACLE應該在塊上保留多少空間來完成將來的更新, 預設值是10%, 如果自由空間的百分比高於PctFree指定值, 這個塊就稱為自由的。

                PctUsed告訴ORACLE當前不自由的塊上自由空間的百分比需要達到多大時, 才能使它再次變為自由的, 預設值為40%。

                使用MSSM時, 這兩個引數設定控制著塊何時放入freelist中, 以及何時從freelist中取出。 如果使用預設值,PctFree為10, PctUsed為40, 那麼在塊到達90%之前(有10%以上的自由空間), 這個塊會一直在freelist上。 一旦到底90%, 就會從freelist中取出, 而且直到塊上的自由空間超過了塊的60%, 才會重新回到freelist上, 在此之前, 這個塊一直不在freelist上。

                使用ASSM時, PctFree仍然會限制能否將一個新行插入到一個塊中, 但是它不會控制一個塊是否在freelist上, 因為ASSM根本不使用freelist。在ASSM中, PCTUSED引數將被忽略。

                 如果PctFree設定的太小, 更新行時就會導致行遷移。

三、 ORACLE區管理

         ORACLE區的管理分為:

        3.1 自動分配

              ORACLE會按照遞增演算法來分配空間。會容易造成磁碟碎片。

        3.2 統一尺寸