VACUUM - Amazon Redshift

VACUUM

Reclassifica linhas e recupera espaço em qualquer tabela especificada ou em todas as tabelas no banco de dados atual.

nota

Somente usuários com as permissões de tabela necessárias podem efetivamente limpar uma tabela. Se VACUUM for executado sem as permissões necessárias de tabela, a operação será concluída com êxito, mas sem efeito. Para obter uma lista de permissões de tabela válidas para executar efetivamente VACUUM, consulte a seção Privilégios obrigatórios a seguir.

O Amazon Redshift classifica os dados automaticamente e executa VACUUM DELETE em segundo plano. Isso reduz a necessidade de executar o comando VACUUM. Para obter mais informações, consulte Vacuum de tabelas.

Por padrão, VACUUM ignora a fase de classificação para qualquer tabela em que mais de 95 por cento das linhas da tabela já estejam classificadas. Ignorar a fase de classificação pode melhorar significativamente a performance de VACUUM. Para alterar ou excluir o limite de classificação padrão para uma única tabela, inclua o nome da tabela e o parâmetro TO limite PERCENT ao executar o comando VACUUM.

Os usuários podem acessar tabelas enquanto elas estão sendo limpas. É possível executar consultas e operações de gravação enquanto uma tabela está sendo limpa, mas quando comandos de linguagem de manipulação de dados (DML) e uma limpeza são executados simultaneamente, ambos podem levar mais tempo. Se você executar instruções UPDATE e DELETE durante uma limpeza, a performance do sistema pode ser reduzida. VACUUM DELETE bloqueia temporariamente operações de atualização e exclusão.

O Amazon Redshift executa automaticamente uma limpeza DELETE ONLY em segundo plano. A operação de limpeza automática é pausada quando os usuários executam operações de linguagem de definição de dados (DDL), como ALTER TABLE.

nota

A sintaxe e o comportamento do comando VACUUM no Amazon Redshift são substancialmente diferentes da operação VACUUM do PostgreSQL. Por exemplo, a operação VACUUM padrão no Amazon Redshift é VACUUM FULL. Ela recupera o espaço em disco e reclassifica todas as linhas. Por outro lado, a operação padrão VACUUM no PostgreSQL recupera somente o espaço e o disponibiliza para reutilização.

Para obter mais informações, consulte Vacuum de tabelas.

Privilégios obrigatórios

A seguir estão os privilégios obrigatórios para VACUUM:

  • Superusuário

  • Usuários com privilégio VACUUM

  • Proprietário da tabela

  • Proprietário do banco de dados com o qual a tabela é compartilhada

Sintaxe

VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ] [ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]

Parâmetros

FULL

Classifica a tabela especificada (ou todas as tabelas no banco de dados atual) e recupera o espaço em disco ocupado por linhas que foram marcadas para exclusão pelas operações UPDATE e DELETE anteriores. VACUUM FULL é o valor padrão.

Uma limpeza total não executa uma reindexação de tabelas intercaladas. Para reindexar tabelas intercaladas acompanhadas por uma limpeza completa, use a opção VACUUM REINDEX.

Por padrão, VACUUM FULL ignora a fase de classificação de qualquer tabela que já esteja pelo menos 95% classificada. Se VACUUM puder ignorar a fase de classificação, o comando executará DELETE ONLY e recuperará o espaço na fase de exclusão para que pelo menos 95% das linhas restantes não sejam marcadas para exclusão.  

Se o limite de classificação não for alcançado (por exemplo, se 90% das linhas forem classificadas) e VACUUM executar uma classificação completa, o comando também executará uma operação de exclusão completa, recuperando espaço de 100% das linhas excluídas.

Você pode alterar o limite de limpeza padrão apenas para uma única tabela. Para alterar o limite de limpeza padrão para uma única tabela, inclua o nome da tabela e o parâmetro TO limite PERCENT.

SORT ONLY

Classifica a tabela especificada (ou todas as tabelas no banco de dados atual) sem retomar espaço liberado pelas linhas excluídas. Essa opção é útil quando a recuperação de espaço em disco não é importante, mas sim a reclassificação de novas linhas. Uma limpeza do tipo SORT ONLY reduz o tempo decorrido para operações de limpeza quando a região não classificada não contém um grande número de linhas excluídas e não se estende por toda a região classificada. Aplicativos que não têm restrições de espaço em disco mas dependem de otimizações de consulta associadas à manutenção de linhas classificadas na tabela podem se beneficiar desse tipo de limpeza.

Por padrão, VACUUM SORT ONLY ignora qualquer tabela que esteja pelo menos 95% classificada. Para alterar o limite de classificação padrão para uma única tabela, inclua o nome da tabela e o parâmetro TO limite PERCENT ao executar o comando VACUUM.

DELETE ONLY

O Amazon Redshift executa automaticamente uma limpeza DELETE ONLY em segundo plano. Assim, você dificilmente precisará executar uma limpeza DELETE ONLY.

VACUUM DELETE solicita de volta o espaço em disco ocupado por linhas que foram marcadas para exclusão pelas operações UPDATE e DELETE anteriores, e compacta a tabela para liberar o espaço ocupado. Uma operação de limpeza DELETE ONLY não classifica dados da tabela.

Essa opção reduz o tempo decorrido para operações de vacuum quando é importante recuperar espaço em disco, mas reclassificar novas linhas não é. Essa opção também pode ser útil quando a performance da sua consulta já é ótimo, e reclassificar linhas para otimizar a performance da consulta não é uma necessidade.

Por padrão, VACUUM DELETE ONLY recupera o espaço, de maneira que pelo menos 95% das linhas restantes não sejam marcadas para exclusão. Para alterar o limite de exclusão padrão para uma única tabela, inclua o nome da tabela e o parâmetro TO limite PERCENT ao executar o comando VACUUM. 

Algumas operações, como ALTER TABLE APPEND, podem fazer com que as tabelas sejam fragmentadas. Ao usar a cláusula DELETE ONLY, a operação de limpeza solicitará de volta o espaço das tabelas fragmentadas. O mesmo valor limite de 95% se aplica à operação de desfragmentação.

REINDEX tablename

Analisa a distribuição dos valores nas colunas de chave de classificação intercaladas e executa uma operação VACUUM completa. Se REINDEX é usado, um nome de tabela é necessário.

VACUUM REINDEX é bem mais demorado do que VACUUM FULL porque inclui uma etapa adicional para analisar as chaves de classificação intercaladas. As operações de classificação e mesclagem podem levar mais tempo para tabelas intercaladas porque a classificação intercalada pode precisar reorganizar mais linhas do que uma classificação composta.

Se uma operação VACUUM REINDEX encerrar antes da conclusão, a próxima operação VACUUM retomará a reindexação antes de executar a operação de limpeza completa.

VACUUM REINDEX não é compatível com TO threshold PERCENT. 

table_name

Nome de uma tabela a ser limpa. Se você não especificar um nome para a tabela, a operação de limpeza se aplicará a todas as tabelas no banco de dados atual. Você pode especificar qualquer tabela permanente ou temporária criada por usuário. O comando não é significativo para outros objetos, como exibições e tabelas de sistema.

Se você incluir o parâmetro TO limite PERCENT, será necessário um nome para a tabela.

RECLUSTER tablename

Classifica as partes da tabela que não são classificadas. Partes da tabela que já estão classificadas por classificação automática de tabela são deixadas intactas. Esse comando não mescla os dados recém-classificados com a região classificada. Ele também não recupera todo o espaço marcado para exclusão. Quando esse comando for concluído, a tabela pode não aparecer totalmente classificada, conforme indicado pelo campo unsorted em SVV_TABLE_INFO.

Recomendamos que você use VACUUM RECLUSTER para tabelas grandes com ingestão frequente e consultas que acessam apenas os dados mais recentes.

VACUUM RECLUSTER não é compatível com o limite TO PERCENT. Se RECLUSTER for usado, um nome de tabela será necessário.

O VACUUM RECLUSTER não é compatível com tabelas com chaves de classificação intercaladas e tabelas com estilo de distribuição ALL.

table_name

Nome de uma tabela a ser limpa. Você pode especificar qualquer tabela permanente ou temporária criada por usuário. O comando não é significativo para outros objetos, como exibições e tabelas de sistema.

TO limite PERCENT

Cláusula que especifica o limite acima do qual VACUUM ignora a fase de classificação e o limite de destino para recuperar espaço na fase de exclusão. O limite de classificação é a porcentagem de linhas do total que já está classificada para a tabela especificada antes da limpeza.  O delete threshold é a porcentagem mínima do total de linhas não marcadas para exclusão após a limpeza.

Como o VACUUM reclassifica as linhas apenas quando a porcentagem de linhas classificadas em uma tabela é menor que o limite de classificação, o Amazon Redshift geralmente pode reduzir significativamente os tempos de VACUUM. De modo semelhante, quando VACUUM não é restrito a recuperar o espaço de 100% das linhas marcadas para exclusão, muitas vezes é capaz de regravar blocos que contêm somente algumas linhas excluídas.

Por exemplo, se você especificar 75 para o limite, VACUUM ignorará a fase de classificação se 75% ou mais das linhas da tabela já estiverem classificadas. Para a fase de exclusão, VACUUMS define um objetivo de recuperação de espaço em disco de forma que 75% das linhas da tabela não sejam marcadas para exclusão após a limpeza. O valor do limite deve ser um número inteiro entre 0 e 100. O padrão é 95. Se você especificar um valor de 100, VACUUM sempre classificará a tabela a menos que ela já esteja totalmente classificada e recuperará o espaço de todas as linhas marcadas para exclusão. Se você especificar um valor de 0, VACUUM nunca classificará a tabela e nunca recuperará espaço.

Se você incluir o parâmetro TO limite PERCENT, também deverá especificar um nome para a tabela. Se um nome para a tabela for omitido, VACUUM retorna uma falha.

Não é possível usar o parâmetro TO threshold PERCENT com REINDEX.

BOOST

Executa o comando VACUUM com recursos adicionais, como memória e espaço em disco, conforme estiverem disponíveis. Com a opção BOOST, VACUUM opera em uma janela e bloqueia exclusões e atualizações simultâneas durante a operação VACUUM. A execução com a opção BOOST compete com recursos do sistema, o que pode afetar a performance da consulta. Execute o VACUUM BOOST quando a carga no sistema for leve, como durante operações de manutenção.

Considere o seguinte ao usar a opção BOOST.

  • Quando BOOST é especificado, o valor de table-name é necessário.

  • BOOST não é compatível com REINDEX.

  • BOOST é ignorado com DELETE ONLY.

Observações de uso

Para a maioria das aplicações do Amazon Redshift, uma limpeza completa é recomendada. Para obter mais informações, consulte Vacuum de tabelas.

Para executar uma operação de limpeza, observe o seguinte comportamento:

  • Não é possível executar o comando VACUUM em um bloco de transação (BEGIN ... END). Para obter mais informações sobre transações, consulte Isolamento serializável.

  • Você pode executar somente um comando VACUUM em um cluster por vez. Se você tentar executar várias operações de limpeza simultaneamente, o Amazon Redshift retornará um erro.

  • As tabelas podem crescer quando são limpas. Esse comportamento é esperado quando não há linhas excluídas a serem recuperadas ou quando a nova ordem de classificação da tabela resulta em uma taxa mais baixa de compactação de dados.

  • Durante operações de limpeza, qualquer grau de degradação de performance de consulta é esperado. A performance normal é retomada assim que a operação de limpeza é concluída.

  • As operações de gravação simultâneas continuam durante as operações de limpeza, mas não recomendamos realizar operações de gravação durante a limpeza. É mais eficiente concluir operações de gravação antes de executar a limpeza. Além disso, todos os dados gravados após o início de uma operação de limpeza não podem ser eliminados por essa operação. Nesse caso, uma segunda operação de limpeza é necessária.

  • Uma operação de limpeza pode não começar se uma operação de carregamento ou inserção já estiver em andamento. As operações de limpeza exigem temporariamente acesso exclusivo às tabelas para iniciar. Esse acesso exclusivo é necessário por pouco tempo para que as operações de limpeza não obstruam cargas e inserções simultâneas por qualquer período significativo.

  • As operações de limpeza são ignoradas quando não há trabalho a fazer para uma tabela específica. No entanto, há algumas sobrecargas associadas à descoberta de que a operação pode ser ignorada. Se você sabe que uma tabela é limpa ou não atende ao limite de limpeza, não execute uma operação de limpeza nela.

  • Uma operação de limpeza DELETE ONLY em uma tabela pequena pode não reduzir o número de blocos usados para armazenar dados, especialmente quando a tabela tem um grande número colunas ou o cluster usa um grande número fatias por nó. Essas operações de limpeza adicionam um bloco por coluna por fatia para contabilizar inserções simultâneas na tabela, e essa sobrecarga pode exceder a redução da contagem de blocos do espaço em disco recuperado. Por exemplo, se uma tabela de 10 colunas em um cluster de 8 nós ocupar 1000 blocos antes de uma limpeza, a limpeza não reduzirá a contagem de blocos real a não ser que mais de 80 blocos de espaço em disco sejam recuperados devido às linhas excluídas. (Cada bloco de dados usa 1 MB.)

As operações de limpeza automáticas pausarão caso alguma destas condições não forem atendidas:

  • Um usuário executa uma operação de linguagem de definição de dados (DDL), como ALTER TABLE, que precisa de um bloqueio exclusivo na tabela em que a limpeza automática está atuando.

  • Um usuário acionar VACUUM em qualquer tabela do cluster (somente um VACUUM pode ser executado por vez).

  • Um período de carga elevada no cluster.

Exemplos

Recupere o espaço e o banco de dados e reclassifique as linhas em todas as tabelas com base no limite padrão de 95% de vacuum.

vacuum;

Recupere espaço e reclassifique as linhas na tabela SALES com base no limite padrão de 95%.

vacuum sales;

Sempre recupere espaço e reclassifique as linhas na tabela SALES.

vacuum sales to 100 percent;

Reclassifique as linhas na tabela SALES somente se menos que 75% das linhas já estiverem organizadas.

vacuum sort only sales to 75 percent;

Recupere espaço na tabela SALES de maneira que pelo menos 75% das linhas restantes não sejam marcadas para exclusão depois da limpeza.

vacuum delete only sales to 75 percent;

Reindexe e limpe a tabela LISTING.

vacuum reindex listing;

O comando a seguir retorna um erro.

vacuum reindex listing to 75 percent;

Reagrupe e limpe a tabela LISTING.

vacuum recluster listing;

Reagrupe e limpe a tabela LISTING com a opção BOOST.

vacuum recluster listing boost;