表收縮技術

hooca發表於2014-10-25
段空間收縮segment shrink,從10g開始支援。

頻繁的DML操作,會導致段空間產生大量空隙。

觀察段空間狀況:


點選(此處)摺疊或開啟

  1. select sum(bytes)/1024/1024
  2. from dba_segments
  3. where segment_name='t_table';
結合表的行數,判斷空間使用率。


點選(此處)摺疊或開啟

  1. col frag format 999999.99
  2. col owner format a30
    col table_name format a30
    select * from (
    select a.owner,
      a.table_name,
      a.num_rows,
      a.avg_row_len * a.num_rows,
      sum(b.bytes),
      (a.avg_row_len * a.num_rows) / sum(b.bytes) frag
    from dba_tables a, dba_segments b
    where a.table_name = b.segment_name
    and a.owner = b.owner
    and a.owner not in 
      ('SYS','SYSTEM','OUTLN','DMSYS','TSMSYS','DBSNMP','WMSYS','EXFSYS','CTXSYS','XDB','OLAPSYS','ORDSYS','MDSYS','SYSMAN')
    group by a.owner, a.table_name, a.avg_row_len, a.num_rows
    having a.avg_row_len * a.num_rows / sum(b.bytes) < 0.7
    order by sum(b.btyes) desc)
    where rownum <= 100;

  3. OWNER                          TABLE_NAME                       NUM_ROWS
    ------------------------------ ------------------------------ ----------
    A.AVG_ROW_LEN*A.NUM_ROWS SUM(B.BYTES)       FRAG
    ------------------------ ------------ ----------
    SH                             PRODUCTS                               72
                       12744      1048576        .01


    SH                             PROMOTIONS                            503
                       49294      1048576        .05


    SH                             T1                                    128
                        1280      1048576        .00

FRAG越低,表示填滿的資料塊在整個段空間的比例越小,碎片越多。

壓縮表:

點選(此處)摺疊或開啟

  1. alter table t_table enable row movement;
  2. alter table t_table shrink space cascade;    //下調高水線
  3. alter table t_table shrink space compact;    //不下調高水線
能以線上方式使高水位線下降,無需停機,無需額外的空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22621861/viewspace-1309462/,如需轉載,請註明出處,否則將追究法律責任。

相關文章