SYSCS_UTIL.SYSCS_INPLACE_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 Derby 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.
Nota: 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 Guia do Servidor e Administra????o do Derby.
Refer??ncias relacionadas
SYSCS_UTIL.SYSCS_COMPRESS_TABLE
SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS
SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY
SYSCS_UTIL.SYSCS_FREEZE_DATABASE
SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE
SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE
SYSCS_UTIL.SYSCS_BACKUP_DATABASE
SYSCS_UTIL.SYSCS_EXPORT_TABLE
SYSCS_UTIL.SYSCS_EXPORT_QUERY
SYSCS_UTIL.SYSCS_IMPORT_TABLE
SYSCS_UTIL.SYSCS_IMPORT_DATA