Oracle資料庫碎片整理
1、碎片是如何產生的
當生成一個資料庫時,它會分成稱為表空間( Tablespace )的多個邏輯段( Segment ),如系統(System)表空間 , 臨時(Temporary)表空間等。一個表空間可以包含多個資料範圍(Extent)和一個或多個自由範圍塊,即自由空間(Free Space)。
表空間、段、範圍、自由空間的邏輯關係如下:
當表空間中生成一個段時,將從表空間有效自由空間中為這個段的初始範圍分配空間。在這些初始範圍充滿資料時,段會請求增加另一個範圍。這樣的擴充套件過程會一直繼續下去,直到達到最大的範圍值,或者在表空間中已經沒有自由空間用於下一個範圍。最理想的狀態就是一個段的資料可被存在單一的一個範圍中。這樣,所有的資料儲存時靠近段內其它資料,並且尋找資料可少用一些指標。但是一個段包含多個範圍的情況是大量存在的,沒有任何措施可以保證這些範圍是相鄰儲存的,當要滿足一個空間要求時,資料庫不再合併相鄰的自由範圍(除非別無選擇), 而是尋找表空間中最大的自由範圍來使用。這樣將逐漸形成越來越多的離散的、分隔的、較小的自由空間,即碎片。例如:
2、碎片對系統的影響
隨著時間推移,基於資料庫的應用系統的廣泛使用,產生的碎片會越來越多,將對資料庫有以下兩點主要影響:
1)導致系統效能減弱。
如上所述,當要滿足一個空間要求時,資料庫將首先查詢當前最大的自由範圍,而 “最大”自由範圍逐漸變小,要找到一個足夠大的自由範圍已變得越來越困難,從而導致表空間中的速度障礙,使資料庫的空間分配愈發遠離理想狀態;
2)浪費大量的表空間。
儘管有一部分自由範圍(如表空間的 pctincrease 為非 0 )將會被 SMON (系統監控)後臺程式週期性地合併,但始終有一部分自由範圍無法得以自動合併,浪費了大量的表空間。
3、自由範圍的碎片計算
由於自由空間碎片是由幾部分組成,如範圍數量、最大範圍尺寸等,我們可用 FSFI--Free Space Fragmentation Index (自由空間碎片索引)值來直觀體現:
FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents))) |
可以看出, FSFI 的最大可能值為 100 (一個理想的單檔案表空間)。隨著範圍的增加, FSFI 值緩慢下降,而隨著最大範圍尺寸的減少, FSFI 值會迅速下降。
下面的指令碼可以用來計算 FSFI 值:
rem FSFI Value Compute |
比如,在某資料庫執行指令碼 fsfi.sql, 得到以下 FSFI 值:
TABLESPACE_NAME FSFI |
統計出了資料庫的 FSFI 值,就可以把它作為一個可比引數。在一個有著足夠有效自由空間,且FSFI 值超過 30 的表空間中,很少會遇見有效自由空間的問題。當一個空間將要接近可比引數時,就需要做碎片整理了。
4、自由範圍的碎片整理
表空間的 pctincrease 值為非 0。
可以將表空間的預設儲存引數 pctincrease 改為非 0 。一般將其設為 1 ,如:
alter tablespace temp |
這樣 SMON 便會將自由範圍自動合併。也可以手工合併自由範圍: alter tablespace temp coalesce。
5、段的碎片整理
我們知道,段由範圍組成。在有些情況下,有必要對段的碎片進行整理。要檢視段的有關資訊,可檢視資料字典 dba_segments ,範圍的資訊可檢視資料字典 dba_extents 。如果段的碎片過多, 將其資料壓縮到一個範圍的最簡單方法便是用正確的儲存引數將這個段重建,然後將舊錶中的資料插入到新表,同時刪除舊錶。這個過程可以用 Import/Export (輸入 / 輸出)工具來完成。
Export ()命令有一個(壓縮)標誌,這個標誌在讀表時會引發 Export 確定該表所分配的物理空間量,它會向輸出轉儲檔案寫入一個新的初始化儲存引數 -- 等於全部所分配空間。若這個表關閉, 則使用 Import ()工具重新生成。這樣,它的資料會放入一個新的、較大的初始段中。例如:
|
若輸出成功,則從庫中刪除已輸出的表,然後從輸出轉儲檔案中輸入表:
imp user/password file=exp.dmp commit=Y buffer=64000 full=Y |
這種方法可用於整個資料庫。
以上簡單分析了 Oracle 資料庫碎片的產生、計算方法及整理,僅供參考。資料庫的效能最佳化是一項技術含量高,同時又需要有足夠耐心、認真細緻的工作。 對資料庫碎片的一點探討,下面是一種如何自動處理表空間碎片的程式碼,希望對上大家看上文有用。
Coalesce Tablespace Automatically |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 資料庫碎片整理Oracle資料庫
- Oracle資料庫表碎片整理Oracle資料庫
- Oracle 資料庫碎片整理(zt)Oracle資料庫
- Oracle資料庫碎片整理(轉)Oracle資料庫
- Oracle 資料庫整理表碎片Oracle資料庫
- Oracle資料表碎片整理Oracle
- oracle 碎片整理Oracle
- oracle表碎片整理Oracle
- oracle碎片整理方法Oracle
- MySQL資料碎片的整理和分析MySql
- ORACLE碎片整理一(轉載)Oracle
- ORACLE碎片整理二(轉載)Oracle
- ORACLE表空間的碎片整理Oracle
- 關於資料庫碎片管理資料庫
- oracle表碎片以及整理(高水位線)Oracle
- Oracle 資料庫縮寫術語整理Oracle資料庫
- 資料庫資料整理資料庫
- 資料庫整理資料庫
- MySQL表碎片整理MySql
- HSQLDB資料庫整理SQL資料庫
- 資料庫優化之表碎片處理資料庫優化
- MysqL碎片整理優化MySql優化
- Oracle 整理表碎片、釋放表的空間Oracle
- 監控Oracle資料庫效能的指令碼段整理Oracle資料庫指令碼
- 入侵oracle資料庫時常用的操作命令整理(轉)Oracle資料庫
- 資料庫事務整理資料庫
- mysql之 OPTIMIZE TABLE整理碎片MySql
- Java 資料庫知識整理Java資料庫
- SQL server資料庫表碎片比例查詢語句SQLServer資料庫
- windows10系統磁碟碎片整理在哪 win10如何開啟磁碟碎片整理WindowsWin10
- 伺服器資料恢復—透過拼接資料庫碎片恢復SqlServer資料庫資料的資料恢復案例伺服器資料恢復資料庫SQLServer
- Oracle 表碎片Oracle
- oracle碎片清理Oracle
- Mysql資料庫主從心得整理MySql資料庫
- 驗證Oracle 10g線上整理碎片索引是否失效過程Oracle 10g索引
- Oracle 資料庫Oracle資料庫
- 整理了一份oracle資料庫培訓課程大綱Oracle資料庫
- 資料庫升級-物理重新整理資料字典資料庫