SYSCS_UTIL.SYSCS_COMPRESS_TABLEシステム手続きを使って、表や索引に割り当てられている未使用の領域を再利用することができます。 典型的な状況では、割り当てられた未使用の領域は表から大容量の情報が削除された場合や、索引が更新された場合に存在します。既定では、Derbyは未使用の領域を基本ソフト(OS)に返却しません。例えばページが表や索引に一度割り当てられると、その表や索引が破棄されるまでは、領域はOSに自動的に返却されません。 SYSCS_UTIL.SYSCS_COMPRESS_TABLEにより利用されていない領域を基本ソフト(OS)に返却できます。
SYSCS_UTIL.SYSCS_COMPRESS_TABLEシステム手続きは索引の再構築処理の一環として、全ての索引の統計情報を更新します。
SYSCS_UTIL.SYSCS_COMPRESS_TABLE (IN SCHEMANAME VARCHAR(128), IN TABLENAME VARCHAR(128), IN SEQUENTIAL SMALLINT)
SEQUENTIALを指定して、USスキーマにあるCUSTOMERという表を圧縮します。
call SYSCS_UTIL.SYSCS_COMPRESS_TABLE('US', 'CUSTOMER', 1)
SEQUENTIALを指定して、USスキーマにあるCUSTOMERという表を圧縮します。
CallableStatement cs = conn.prepareCall ("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?)"); cs.setString(1, "US"); cs.setString(2, "CUSTOMER"); cs.setShort(3, (short) 1); cs.execute();
SEQUENTIALの値を特定しない場合、Derbyは、表にある全ての索引への処理を並列して処理します。 SEQUENTIALの値を特定しないと、この手続きは多量にメモリを必要として、ディスクの多量の一時領域を使うこととなります。(そのおおよその量は、使われている領域と割り当てられた使われていない領域の2倍ほどです。) これは表を圧縮するときに、Derbyが、 (既存の領域を並べ替えたり切り捨てたりするのではなく、)生きてる行を新規に割り当てた領域に写すからです。余分な領域はCOMMITのとき、基本ソフト(OS)に返されます。
SEQUENTIALの値が特定された場合、Derbyは、まず表を圧縮してから個々の索引を順に圧縮します。SEQUENTIALを利用すると、必要なメモリやディスク領域を少なくすることができますが、処理時間はより長くなります。メモリやディスク領域の利用を減らすなら、SEQUENTIALの引数を指定してください。