SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE Recuperação do espaço não utilizado Procedimentos do sistemaSYSCS_INPLAC E_COMPRESS_TABLE

O procedimento do sistema SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE é utilizado para recuperar o espaço alocado, mas não utilizado, de uma tabela e seus índices. Normalmente, existe espaço alocado mas não utilizado quando uma grande quantidade de dados é excluída da tabela, e não ocorrem inserções subseqüentes para utilizar o espaço criado pelas exclusões. Por padrão, o não retorna para o sistema operacional o espaço não utilizado. Por exemplo, uma vez que uma página tenha sido alocada para uma tabela ou um índice, esta não é devolvida automaticamente para o sistema operacional até que a tabela ou o índice tenha sido removido. O procedimento do sistema SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE permite devolver para o sistema operacional o espaço não utilizado.

Este procedimento do sistema pode ser utilizado para ocasionar três níveis de compressão in loco de uma tabela SQL: PURGE_ROWS, DEFRAGMENT_ROWS e TRUNCATE_END. Diferentemente de SYSCS_UTIL.SYSCS_COMPRESS_TABLE(), todo o trabalho é feito in loco na tabela ou índice existente.

Sintaxe SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE( IN SCHEMANAME VARCHAR(128), IN TABLENAME VARCHAR(128), IN PURGE_ROWS SMALLINT, IN DEFRAGMENT_ROWS SMALLINT, IN TRUNCATE_END SMALLINT )
SCHEMANAME
Um argumento de entrada do tipo VARCHAR(128) que especifica o esquema da tabela. Passar um argumento nulo resulta em erro.
TABLENAME
Um argumento de entrada do tipo VARCHAR(128) que especifica o nome da tabela. A cadeia de caracteres deve corresponder exatamente às letras maiúsculas e minúsculas do nome da tabela: um argumento igual a "Fred" é passado para o SQL como o identificador delimitado 'Fred'. Passar um argumento nulo resulta em erro.
PURGE_ROWS
Se PURGE_ROWS for definido com um valor diferente de zero, então será feita uma única passagem através da tabela para remover as linhas com a exclusão efetivada. Este espaço se torna disponível para as próximas linhas inseridas, mas permanece alocado para a tabela. Como esta opção varre todas as páginas da tabela, seu desempenho é linearmente proporcional ao tamanho da tabela.
DEFRAGMENT_ROWS
Se DEFRAGMENT_ROWS for definido com um valor diferente de zero, então será feita uma única passagem de desfragmentação para mover as linhas existentes no final da tabela em direção ao início da tabela. O objetivo da desfragmentação é esvaziar um conjunto de páginas no final da tabela, que poderão depois ser devolvidas ao sistema operacional pela opção TRUNCATE_END. Recomenda-se somente utilizar a opção DEFRAGMENT_ROWS quando a opção TRUNCATE_END também é utilizada. A opção DEFRAGMENT_ROWS varre toda a tabela, e precisa atualizar as entradas dos índices de todas as linhas da tabela base movidas, portanto o tempo de execução é linearmente proporcional ao tamanho da tabela.
TRUNCATE_END
Se TRUNCATE_END for definido com um valor diferente de zero, então todas as páginas contíguas no final da tabela serão devolvidas para o sistema operacional. A execução das opções PURGE_ROWS e/ou DEFRAGMENT_ROWS pode aumentar o número de páginas afetadas. Por si só, esta opção não realiza uma varredura na tabela.
Exemplo SQL

Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando todas as opções de compressão disponíveis: CALL SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('US', 'CLIENTE', 1, 1, 1);

Para devolver o espaço livre no final da mesma tabela, pode se feita a seguinte chamada, que é muito mais rápida do que executar todas as opções, mas provavelmente devolve muito menos espaço: CALL SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('US', 'CLIENTE', 0, 0, 1);

Exemplo Java

Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando todas as opções de compressão disponíveis: CallableStatement cs = conn.prepareCall ("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?, ?, ?)"); cs.setString(1, "US"); cs.setString(2, "CLIENTE"); cs.setShort(3, (short) 1); cs.setShort(4, (short) 1); cs.setShort(5, (short) 1); cs.execute();

Para devolver o espaço livre no final da mesma tabela, pode se feita a seguinte chamada, que é muito mais rápida do que executar todas as opções, mas provavelmente devolve muito menos espaço: CallableStatement cs = conn.prepareCall ("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?, ?, ?)"); cs.setString(1, "US"); cs.setString(2, "CLIENTE"); cs.setShort(3, (short) 0); cs.setShort(4, (short) 0); cs.setShort(5, (short) 1); cs.execute();

Recomenda-se que o procedimento SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE seja executado no modo de auto-efetivação. Este procedimento obtém um bloqueio exclusivo na tabela sendo comprimida. Todos os planos de instrução dependentes da tabela ou de seus índices são invalidados. Para obter informações sobre como identificar espaço não utilizado deve ser consultado o .