SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite VACUUM


Resumo :neste tutorial, explicaremos por que você precisa usar o SQLite VACUUM comando e mostre como usá-lo para otimizar o arquivo de banco de dados.

Por que você precisa do SQLite VACUUM comando


Primeiro, quando você descarta objetos de banco de dados como tabelas, exibições, índices e gatilhos ou exclui dados de tabelas, o tamanho do arquivo de 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 de tamanho.

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

Terceiro, as operações de inserção, atualização e exclusão 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 para a 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. Essa operação desfragmenta os objetos do banco de dados, ignora os espaços livres e reempacota 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.

Porque o VACUUM O 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, em seguida, limpa o banco de dados.

O SQLite VACUUM comando


O VACUUM O comando não altera o conteúdo do banco de dados, exceto os valores de rowid. Se você usar INTEGER PRIMARY KEY coluna, o VACUUM não altera os valores dessa coluna. No entanto, se você usar o rowid sem alias, o VACUUM comando irá redefinir os valores de rowid. Além de alterar os valores do rowid, o VACUUM O comando também cria o índice do zero.

É uma boa prática executar o VACUUM comando periodicamente, especialmente quando você exclui grandes tabelas ou índices de um banco de dados.

É importante observar que o VACCUM O comando requer armazenamento para manter o arquivo original e também a cópia. Além disso, o VACUUM comando requer acesso exclusivo ao arquivo de banco de dados. Em outras palavras, o VACUUM O comando não será executado com sucesso 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 o arquivo de banco de dados anexado.

Embora 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 SQLite VACUUM comando


O seguinte mostra como executar o VACUUM comando:
VACUUM;Code language: SQL (Structured Query Language) (sql)

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

A instrução a seguir habilita o modo de vácuo automático completo:
PRAGMA auto_vacuum = FULL;Code language: SQL (Structured Query Language) (sql)

Para habilitar o vácuo incremental, você usa a seguinte instrução:
PRAGMA auto_vacuum = INCREMENTAL;Code language: SQL (Structured Query Language) (sql)

A instrução a seguir desabilita o modo de vácuo automático:
PRAGMA auto_vacuum = NONE;Code language: SQL (Structured Query Language) (sql)

VACUUM com um INTO cláusula


Aqui está a sintaxe do VACUUM com INTO cláusula:
VACUUM schema-name INTO filename;Code language: SQL (Structured Query Language) (sql)

O VACUUM instrução com um 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 terá o mesmo conteúdo lógico do banco de dados original, mas totalmente vazio.

O filename no INTO cláusula pode ser qualquer expressão SQL que resulte em 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 um erro.

O VACUUM O comando é muito útil para gerar cópias de backup de um banco de dados ativo. É seguro transacional, onde o banco de dados gerado é um instantâneo consistente do banco de dados original. No entanto, se um desligamento não planejado ou falta 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 base de dados:
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Code language: JavaScript (javascript)

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