Resumo : neste tutorial explicaremos porque você precisa usar o VACUUM
comando SQLite e mostraremos como usá-lo para otimizar o arquivo de banco de dados.
Por que você precisa VACUUM
do 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 fornece o VACUUM
comando 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 VACUUM
comando 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.
VACUUM
O comando SQLite
O VACUUM
comando não altera o conteúdo do banco de dados, exceto os valores rowid . Se você usar INTEGER PRIMARY KEY
coluna, VACUUM
não altera os valores dessa coluna. No entanto, se você usar rowid sem alias, o VACUUM
comando redefinirá os valores de rowid. Além de alterar os valores do rowid, o VACUUM
comando também constrói o índice do zero.
É uma boa prática executar o VACUUM
comando periodicamente, especialmente ao excluir tabelas ou índices grandes de um banco de dados.
É importante observar que o VACCUM
comando requer armazenamento para conter o arquivo original e também a cópia. Além disso, o VACUUM
comando requer acesso exclusivo ao arquivo do banco de dados. Em outras palavras, o VACUUM
comando 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 VACUUM
comando no main
banco 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 VACUUM
comando manualmente.
Como executar o VACUUM
comando SQLite
O seguinte mostra como executar o VACUUM
comando:
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 )
VACUUM
com uma INTO
cláusula
Aqui está a sintaxe da cláusula VACUUM
with INTO
:
VACUUM schema-name INTO filename;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A VACUUM
instrução com uma INTO
clá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 filename
na INTO
clá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 INTO
comando resultará em erro.
O VACUUM
comando é 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 INTO
comando para gerar um novo banco de dados com o nome do arquivo chinook_backup.db
cujos dados são copiados do main
esquema do chinook
banco 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 VACUUM
comando SQLite e como executá-lo para otimizar o banco de dados.