SQLite VÁCUO

Resumo : neste tutorial explicaremos porque você precisa usar o VACUUMcomando SQLite e mostraremos como usá-lo para otimizar o arquivo de banco de dados.

Por que você precisa VACUUMdo comando SQLite

Primeiro, quando você elimina objetos de banco de dados, como tabelas , visualizações , índices e gatilhos , ou exclui dados de tabelas , o tamanho do arquivo do banco de dados permanece inalterado. Porque o SQLite apenas marca os objetos excluídos como gratuitos e os reserva para usos futuros. Como resultado, o tamanho do arquivo de banco de dados sempre aumenta.

Segundo, quando você insere ou exclui dados das tabelas, os índices e tabelas ficam fragmentados, especialmente para o banco de dados que possui um grande número de inserções, atualizações e exclusões.

Terceiro, as operações insert , update  e delete criam blocos de dados não utilizados em páginas individuais do banco de dados. Diminui o número de linhas que podem ser armazenadas em uma única página. Portanto, aumenta o número de páginas para conter uma tabela. Por causa disso, aumenta a sobrecarga de armazenamento da tabela, leva mais tempo para leitura/gravação e diminui o desempenho do cache.

SQLite VÁCUO

SQLite fornece o VACUUMcomando para resolver todos os três problemas acima.

O SQLite primeiro copia os dados de um arquivo de banco de dados para um banco de dados temporário. Esta operação desfragmenta os objetos do banco de dados, ignora os espaços livres e recompacta páginas individuais. Em seguida, o SQLite copia o conteúdo do arquivo de banco de dados temporário de volta para o arquivo de banco de dados original. O arquivo de banco de dados original é substituído.

Como o VACUUMcomando reconstrói o banco de dados, você pode usá-lo para alterar alguns parâmetros de configuração específicos do banco de dados, como tamanho da página, formato da página e codificação padrão. Para fazer isso, você define novos valores usando pragma e depois limpa o banco de dados.

VACUUMO comando SQLite

O VACUUMcomando não altera o conteúdo do banco de dados, exceto os valores rowid . Se você usar INTEGER PRIMARY KEYcoluna, VACUUMnão altera os valores dessa coluna. No entanto, se você usar rowid sem alias, o VACUUMcomando redefinirá os valores de rowid. Além de alterar os valores do rowid, o VACUUMcomando também constrói o índice do zero.

É uma boa prática executar o VACUUMcomando periodicamente, especialmente ao excluir tabelas ou índices grandes de um banco de dados.

É importante observar que o VACCUMcomando requer armazenamento para conter o arquivo original e também a cópia. Além disso, o VACUUMcomando requer acesso exclusivo ao arquivo do banco de dados. Em outras palavras, o VACUUMcomando não será executado com êxito se o banco de dados tiver uma instrução SQL pendente ou uma transação aberta.

Atualmente, a partir da versão 3.9.2, você pode executar o VACUUMcomando no mainbanco de dados, não no arquivo de banco de dados anexado.

Mesmo que o SQLite habilite o modo de vácuo automático que aciona o processo de vácuo automaticamente com algumas limitações. É uma boa prática executar o VACUUMcomando manualmente.

Como executar o VACUUMcomando SQLite

O seguinte mostra como executar o VACUUMcomando:

VACUUM;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Certifique-se de que não haja nenhuma transação aberta enquanto você executa o comando.

A instrução a seguir ativa o modo de vácuo automático completo:

PRAGMA auto_vacuum = FULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para ativar o vácuo incremental, você usa a seguinte instrução:

PRAGMA auto_vacuum = INCREMENTAL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir desativa o modo de vácuo automático:

PRAGMA auto_vacuum = NONE;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

VACUUMcom uma INTOcláusula

Aqui está a sintaxe da cláusula VACUUMwith INTO:

VACUUM schema-name INTO filename;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A VACUUMinstrução com uma INTOcláusula mantém o arquivo de banco de dados original inalterado e cria um novo banco de dados com o nome de arquivo especificado. O novo banco de dados conterá o mesmo conteúdo lógico do banco de dados original, mas totalmente limpo.

O filenamena INTOcláusula pode ser qualquer expressão SQL avaliada como uma string. Deve ser um caminho para um arquivo que não existe ou para um arquivo vazio, ou o VACUUM INTOcomando resultará em erro.

O VACUUMcomando é muito útil para gerar cópias de backup de um banco de dados ativo. É transacional seguro, pois o banco de dados gerado é um instantâneo consistente do banco de dados original. No entanto, se um desligamento não planejado ou perda de energia interromper o comando, o banco de dados gerado poderá estar corrompido.

A instrução a seguir usa o VACUUM INTOcomando para gerar um novo banco de dados com o nome do arquivo chinook_backup.dbcujos dados são copiados do mainesquema do chinookbanco de dados:

VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Linguagem de código:  JavaScript  ( javascript )

Neste tutorial, você aprendeu por que precisa usar o VACUUMcomando SQLite e como executá-lo para otimizar o banco de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *