# Recuperação do espaço não utilizado

As tabelas e índices do Derby (algumas vezes chamados de conglomerados) podem conter espaço não utilizado, depois de grandes quantidades de dados terem sido excluídas ou atualizadas.

Isto acontece porque, por padrão, o Derby não devolve o espaço não utilizado para o sistema operacional. Após a página ter sido alocada para uma tabela ou um índice, o Derby não devolve automaticamente a página para o sistema operacional até que a tabela ou ou índice seja removido, mesmo que o espaço não seja mais necessário. Entretanto, o Derby fornece um mecanismo para recuperar o espaço não utilizado nas tabelas e nos seus índices associados.

Se for determinado que a tabela e seus índices possuem uma quantidade significativa de espaço não utilizado, deverá ser utilizado o procedimento SYSCS_UTIL.SYSCS_COMPRESS_TABLE, ou o procedimento SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE, para recuperar o espaço não utilizado. O procedimento SYSCS_COMPRESS_TABLE garante recuperar a quantidade máxima de espaço livre, às custas de criar temporariamente novas tabelas e índices antes do procedimento ser efetivado. O procedimento SYSCS_INPLACE_COMPRESS tenta recuperar o espaço dentro da mesma tabela, mas não pode garantir que irá recuperar todo o espaço disponível. A diferença entre estes procedimentos é que, diferentemente de SYSCS_COMPRESS_TABLE, o procedimento SYSCS_INPLACE_COMPRESS não utiliza arquivos temporários, e move linhas dentro do mesmo conglomerado.

Como exemplo, após determinar que a tabela VÔOS_DISPONIBILIDADE e seus índices relacionados possuem muito espaço não utilizado, este espaço poderá ser recuperado através do seguinte comando:

    call SYSCS_UTIL.SYSCS_COMPRESS_TABLE('APP', 'VÔOS_DISPONIBILIDADE', 0);

O terceiro parâmetro no procedimento SYSCS_UTIL.SYSCS_COMPRESS_TABLE() determina se a operação será executada em modo seqüencial ou não seqüencial. Se for especificado `0` para o terceiro argumento do procedimento, a operação executará no modo não seqüencial. No modo seqüencial, o Derby comprime a tabela e seus índices seqüencialmente, um de cada vez. A compressão seqüencial utiliza menos memória e espaço em disco, mas é mais lenta. Para forçar a operação executar no modo seqüencial, deverá ser colocado um valor diferente de zero do terceiro argumento. O exemplo a seguir mostra como forçar o procedimento a executar no modo seqüencial:

    call SYSCS_UTIL.SYSCS_COMPRESS_TABLE('APP', 'VÔOS_DISPONIBILIDADE', 1);

Para obter mais informações sobre este comando, deve ser consultado o Manual de Referência do Derby.
Tópico pai: Parte 2: Guia de administração do Derby
Conceitos relacionados
Verificação da consistência do banco de dados
Cópia de segurança e restauração do banco de dados
Arquivo de log em uma unidade separada
Obtenção de informações sobre bloqueios