Bryan Pendleton wrote:
Øystein Grøvlen wrote:
I tried an experiment with on-line compress and it seems like no space
is freed unless I delete records at the end of the heap:

It does seem like the documentation allows for this:

          SYSCS_COMPRESS_TABLE is guaranteed to recover the maximum amount
          of free space, at the cost of temporarily creating new tables
and indexes before the statement in committed. SYSCS_INPLACE_COMPRESS attempts to reclaim space within the same table, but cannot guarantee
          it will recover all available space.

Did you try your same experiment with full compress?


No, since that is quite a different mechanism where effectively a new table is created, the data is moved, and the old table dropped. I was interested in exploring interactions with in-place compress and holdable cursors.

According to the documentation for in-place compress, I would have assumed that I should have been able to release space regardless of where in the file there are free space when I specify both PURGE_ROWS and DEFRAGMENT_ROWS in addition to TRUNCATE_END. From the documentation:

PURGE_ROWS
If PURGE_ROWS is set to a non-zero value, then a single pass is made through the table which will purge committed deleted rows from the table. This space is then available for future inserted rows, but remains allocated to the table. As this option scans every page of the table, its performance is linearly related to the size of the table.
DEFRAGMENT_ROWS
If DEFRAGMENT_ROWS is set to a non-zero value, then a single defragment pass is made which will move existing rows from the end of the table towards the front of the table. The goal of defragmentation is to empty a set of pages at the end of the table which can then be returned to the operating system by the TRUNCATE_END option. It is recommended to only run DEFRAGMENT_ROWS if also specifying the TRUNCATE_END option. The DEFRAGMENT_ROWS option scans the whole table and needs to update index entries for every base table row move, so the execution time is linearly related to the size of the table.
TRUNCATE_END
If TRUNCATE_END is set to a non-zero value, then all contiguous pages at the end of the table will be returned to the operating system. Running the PURGE_ROWS and/or DEFRAGMENT_ROWS options may increase the number of pages affected. This option by itself performs no scans of the table.

My case indicates that the table is not defragmented.

--
Øystein

Reply via email to