O procedimento do sistema SYSCS_UTIL.SYSCS_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, ou os índices são atualizados.
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_COMPRESS_TABLE
permite devolver para o sistema operacional o espaço não utilizado.
Sintaxe
SYSCS_UTIL.SYSCS_COMPRESS_TABLE (IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128), IN SEQUENTIAL SMALLINT)
- SCHEMANAME
- Um argumento de entrada do tipo VARCHAR(128) que especifica o esquema da
tabela. Passar um valor 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.
- SEQUENTIAL
- Um argumento de entrada diferente de zero do tipo SMALLINT força a operação
executar no modo seqüencial, enquanto um argumento igual a zero força a operação
a não executar no modo seqüencial.
Passar um argumento nulo resulta em um erro.
Exemplo SQL
Para comprimir a tabela chamada CLIENTE no esquema chamado US,
utilizando a opção SEQUENTIAL:
CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('US', 'CLIENTE', 1)
Exemplo Java
Para comprimir a tabela chamada CLIENTE no esquema chamado US,
utilizando a opção SEQUENTIAL:
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?)");
cs.setString(1, "US");
cs.setString(2, "CLIENTE");
cs.setShort(3, (short) 1);
cs.execute();
Se o parâmetro SEQUENTIAL não for especificado, o
reconstruirá todos os índices simultaneamente com a tabela base.
Se não for especificado o argumento SEQUENTIAL, este procedimento poderá fazer
uso intenso da memória e utilizar muito espaço temporário em disco
(uma quantidade aproximadamente igual a duas vezes o espaço utilizado, mais o
espaço alocado mas não utilizado).
Isto acontece porque o
comprime a tabela copiando as linhas ativas para o novo espaço alocado
(em vez de embaralhar e truncar o espaço existente).
O espaço extra utilizado é retornado ao sistema operacional no COMMIT.
Quando é especificado SEQUENTIAL, o
comprime a tabela base e depois comprime cada um dos índices seqüencialmente.
Utilizar SEQUENTIAL faz com que seja usado menos memória e espaço em disco,
mas demora mais tempo.
Deve ser utilizado o argumento SEQUENTIAL para reduzir a utilização de
memória e espaço em disco.
O procedimento do sistema SYSCS_UTIL.SYSCS_COMPRESS_TABLE
não pode devolver espaço em disco para o sistema operacional enquanto o COMMIT
não for executado.
Isto significa que o espaço ocupado pela tabela base e seus índices não pode
ser retornado para o sistema operacional enquanto COMMIT não for executado
(somente o espaço em disco alocado temporariamente pela classificação externa
pode ser retornado para o sistema operacional antes de COMMIT).
Recomenda-se utilizar o procedimento
SYSCS_UTIL.SYSCS_COMPRESS_TABLE
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 e de seus índices são
invalidados.
Para obter informações sobre como identificar espaço não utilizado deve ser
consultado o .