quarta-feira, agosto 15, 2012

SQLite - VACUUM

O comando VACUUM recontroi a estrutura da base de dados. Há várias razões para um aplicativo pode fazer isso:
  • A menos que SQLite esteja sendo executado em modo "auto_vacuum = FULL". Quando uma grande quantidade de dados é excluído da base de dados, deixa-se um grande espaço vazio, ou páginas "livres" na base de dados. Isso pode causar uma base de dados ocupando mais espaço em disco do que o estritamente necessário.
    Executando VACUUM para reconstruir a base de dados recupera-se este espaço e reduz o tamanho do ficheiro de base de dados.

  • Inserções, atualizações e exclusões frequentes podem causar um arquivo de banco de dados fragmentado - onde os dados de uma única tabela ou índice estará espalhado em todo o arquivo de banco de dados.
    Execução do comando VACUUM garantimos que cada tabela e índice serão armazenados de forma contínua dentro do arquivo de banco de dados. Em alguns casos, VACUUM pode também reduzir o número de páginas parcialmente cheios no banco de dados, reduzindo o tamanho da base de dados adicionalmente.

  • Normalmente, o page_sizer e o suporte(ou não) ao auto_vacuum devem ser configurados antes do arquivo de banco de dados ser criado. Entretanto, quando o modo write-ahead log não esta habilitado, as opções page_size e/ou auto_vacuum de um arquivo de banco de dados já existente podem ser modificados usando as PRAGMAS e logo em seguida o arquivo sofrerá o VACUUM. Caso a propriedade write-ahead log esta habilitada apenas a funcionalidade de auto_vacuum pode ser modificada usando o VACUUM.



O comando VACUUM pode alterar os IDs das células que não possuirem uma INTEGER PRIMARY KEY explicita.
O VACUUM falhará caso exista alguma transaction aberta, ou se houver uma ou mais instancias do SQL quando esse comando rodar.