断片化調査のスクリプト


表領域の断片化が見れる!

ttitle - 
   center  'Database Freespace Summary'  skip 2 
 
comp sum of nfrags totsiz avasiz on report 
break on report 

set pages 999
col tsname  format     a30 justify c heading 'Tablespace' 
col nfrags  format 999,990 justify c heading 'Free|Frags' 
col mxfrag  format 999,999 justify c heading 'Largest|Frag (MB)' 
col totsiz  format 999,999 justify c heading 'Total|(MB)' 
col avasiz  format 999,999 justify c heading 'Available|(MB)' 
col pctusd  format     990 justify c heading 'Pct|Used' 

select total.TABLESPACE_NAME tsname,
       D nfrags,
       C/1024/1024 mxfrag,
       A/1024/1024 totsiz,
       B/1024/1024 avasiz,
       (1-nvl(B,0)/A)*100 pctusd
from
    (select sum(bytes) A,
            tablespace_name
            from dba_data_files
            group by tablespace_name) TOTAL,
    (select sum(bytes) B,
            max(bytes) C,
            count(bytes) D, 
            tablespace_name
            from dba_free_space
            group by tablespace_name) FREE
where 
      total.TABLESPACE_NAME=free.TABLESPACE_NAME(+);
実行結果
                                                    Database Freespace Summary

                                 Free    Largest   Total   Available Pct
          Tablespace            Frags   Frag (MB)   (MB)     (MB)    Used
------------------------------ -------- --------- -------- --------- ----
MAIN_SPACE                            3     3,968   10,240    10,240    0
UNDOTBS1                             16        13       25        20   22
SYSAUX                                1         4      250         4   98
USERS                                 1         5        5         5    9
SYSTEM                                1         9      480         9   98
                               --------           -------- ---------
sum                                  22             11,000    10,276

SQL>
★解説

FreeFragsは断片化している数を表します。
上記の例で言うと、【UNDOTBS1】は16こ虫食い状態であるといえる。

LargestFragは断片化している場合、その最大サイズ。

Totalはその表領域のサイズ。

Availableは使用可能なエクストテントのサイズ。

PctUsedは使用率。

上記の例では【MAIN_SPACE】は10GBのサイズで10GBまるまる残ってるように見えるが、
実は4GBくらい虫食い状態になってしまっている。
また、断片化数が「1」であるならば、断片化は発生していない。
断片化の解消には表領域の再作成が必要に。
またコアレスすれば連続していない空き領域を連続したものにするので、
コアレスするだけでも断片化数が減ったりもする。
・・・Oracle10gだとコアレスなんて概念ないのかな・・・?