22 December 2009

Informix: วิธีการ compress table

ข้อควรรู้ก่อนทำ Table Compression
  1. สำหรับ user ที่จะใช้ในการรัน compression นั้นต้องเป็น informix 
  2. ต้องรันที่ sysadmin database 
  3. database server ต้องเป็น informix version 11.50 ด้วย
  4. table หรือ partition on table ที่จะ Compress ต้องมีข้อมูลมากกว่า 2000 row และ update statistics แล้ว
  5. ไม่สามารถ compress  temp table 
  6. ไม่สามารถ compress  index
  7. ไม่สามารถ compress  กับ system database
ขั้นตอนการทำ Table Compression

1. login ด้วย user "informix" เข้า database "sysadmin"



2. Enable compression first
Once to enable compression for the database server (run ครั้งแรกที่ทำการ compress ครั้งต่อไปไม่ต้องรันอีก )
execute function task("enable compression" , "${Tabname}", "${Dbname}" , "${Owner}");
    example
    execute function task("enable compression" , "dail_subr_prp_200908", "cmtdb" , "cmtuser");

    3. Create the dictionary
    execute function task("table create_dictionary",  "[Tabname]", "[Dbname]" , "[Owner]");
    example
    execute function task("table create_dictionary",  "dail_subr_prp_200908", "cmtdb" , "cmtuser");

    4. Execute compression
    4.1  กรณี compress ทั้ง table
    execute function task ("table compress repack shrink", "[Tabname]", "[Dbname]" , "[Owner]");
    example
    execute function task ("table compress repack shrink", "dail_subr_prp_200908", "cmtdb" , "cmtuser");

    4.2 กรณี compress by partion ต้องมี ขั้นตอนดังนี้
      4.2.1 หา partition number ที่จะทำการ compress (run on sysadmin)
      select partition,partn,nrows::int as nrows from   sysfragments
      where  fragtype = 'T'
      and  tabid in (select tabid from systables where tabname = '${TabName}')
      order by 1
      Result
      partition  partn20090802
      partn      16777220    --> partition number ที่เราต้องการ
      nrows     19283263

      4.2.2  เมื่อได้ partition number ที่เราต้องการแล้ว ใช้ ก็สามารถ compress table ได้
      execute function task ('fragment compress repack shrink','${Partnum}') ;
      example
      execute function task ('fragment compress repack shrink','16777220') ;

    5. หากต้องการ uncompress table
    execute function task ("table uncompress", "dail_subr_prp_200908", "cmtdb" , "cmtuser");

    No comments: