脫機reorg需要一定的空間,這個空間與目標所在的數據表空間、索引表空間、以及臨時表空間均有關,各空間需求的大小與表和索引所占用的數據頁和索引頁相關。 (1)
對表執行reorg操作如:
db2 reorg table tabschema.tabname,可以理解成四個步驟: 1、排序 2、構建 3、替換 4、重建索引 當執行第1,2,3步時,使用目標表所在的數據表空間,將在數據表空間中建立目標表的影子副本。 此時,數據表空間會增長,增長量為目標表實際大小:Npages*表空間頁大小。 Npages:表示目標表有效數據頁,Npages可通過如下方式獲得,但未必精確,最好先收集一下統計信息(runstats)。 db2 "select substr(tabname,1,20),Npages,Fpages,card from syscat.tables" 1,2,3結束后,數據表空間碎片整理完成,空間回收。 當執行第4步時,使用系統臨時表空間,有幾個索引順序重建幾次。 此時,系統臨時表空間會增長,增長量為單個索引占用的大小,約為:nleaf*索引表空間頁大小。 nleaf:表示有效索引頁,nleaf可通過如下方式獲得,但未必精確,最好先收集一下統計信息(runstats)。 db2 "select substr(tabname,1,20),substr(indname,1,18),nleaf,indcard from syscat.indexes" 4結束后,reorg table完成。 (2)對索引執行reorg操作如:db2 reorg indexes all for table tabschema.tabname 一般一張表有多個索引,將對多個索引一個一個地依次進行reorg操作,最后統一替換。 表空間使用情況: 系統臨時表空間會增長,增長量為單個索引占用的大小,約為:nleaf*索引表空間頁大小。 索引表空間會增長,增長量為一張表中所有索引占用的大小。 例如對一張表的3個索引進行reorg操作,可以看到如下現象: 索引表空間立即降到一個值:A, 系統臨時表空間增長,增長"nleaf*索引表空間頁大小"后下降至初始大小,同時索引表空間增長"nleaf*索引表空間頁大小", 系統臨時表空間又增長,增長"nleaf*索引表空間頁大小"后又下降至初始大小,同時索引表空間在第一次增長的基礎上又增長"nleaf*索引表空間頁大小", 系統臨時表空間再增長,增長"nleaf*索引表空間頁大小"后再下降至初始大小,同時索引表空間再前兩次增長的基礎上再增長"nleaf*索引表空間頁大小", 最后,索引表空間直接降到一個值:A,系統臨時表空間回收。 (3)對表執行reorg操作如:db2 reorg table tabschema.tabname use tempspace1 對表和索引均進行reorg操作 均在系統臨時表空間中進行 先對數據頁reorg,再對索引頁reorg 數據頁reorg需要的系統臨時表空間為:Npages*表空間頁大小 一般一張表有多個索引,索引reorg將一個一個依次順序進行,單個索引的索引頁reorg需要的系統臨時表空間為:nleaf*索引表空間頁大小 (4)在線對表做reorg時,表空間使用非常少。 一般為表空間的extent size(一般為32k),多個並發的話,就要多個extent size。 知道reorg怎樣使用表空間之后,我們在做reorg時就要注意各個空間是否預留足夠,預留多少算足夠呢? 可以按一下方法推算: (1)離線不指定臨時表空間reorg table(目前常用的) 數據表空間預留最大Npages的量,最大的Npages*表空間頁大小,最大的表對應的Npages可通過以下sql獲得 db2 "select substr(tabname,1,20),Npages,Fpages,card from syscat.tables order by Npages desc fetch first 10 rows only" 臨時表空間預留最大nleaf的量,最大的nleaf*表空間頁大小,最大的索引對應的nleaf可通過以下sql獲得 db2 "select substr(tabname,1,20),substr(indname,1,18),nleaf,indcard from syscat.indexes order by nleaf desc fetch first 10 rows only" (2)reorg indexes all 索引表空間預留單個表中含有的所有nleaf的量 db2 "select substr(tabname,1,20),substr(indname,1,18),nleaf,indcard from syscat.indexes where tabname=''" 臨時表空間預留最大nleaf的量 (3)離線指定臨時表空間reorg table use tempspace 臨時表空間預留最大Npages的量和最大nleaf的量 以上是一個時間點只對一張表進行reorg,但同一時間多張表並行reorg時,就要算多個表的空間了。 建議, 所有的數據表空間和索引表空間的使用量控制在50%以下,這樣就不用擔心數據和索引的表空間溢出了。 對於臨時表空間,建議至少有最大nleaf的量。