Riepilogo :in questo tutorial spiegheremo perché è necessario utilizzare SQLite VACUUM
comando e mostra come usarlo per ottimizzare il file di database.
Perché hai bisogno di SQLite VACUUM
comando
Innanzitutto, quando si eliminano oggetti di database come tabelle, viste, indici e trigger o si eliminano dati dalle tabelle, la dimensione del file di database rimane invariata. Perché SQLite contrassegna semplicemente gli oggetti eliminati come liberi e li riserva per usi futuri. Di conseguenza, la dimensione del file di database aumenta sempre di dimensione.
In secondo luogo, quando si inseriscono o si eliminano dati dalle tabelle, gli indici e le tabelle si frammentano, soprattutto per il database che ha un numero elevato di inserimenti, aggiornamenti ed eliminazioni.
In terzo luogo, le operazioni di inserimento, aggiornamento ed eliminazione creano blocchi di dati inutilizzati all'interno delle singole pagine del database. Diminuisce il numero di righe che possono essere memorizzate in una singola pagina. Pertanto, aumenta il numero di pagine per contenere una tabella. Per questo motivo, aumenta il sovraccarico di archiviazione per la tabella, richiede più tempo per leggere/scrivere e riduce le prestazioni della cache.
SQLite fornisce il VACUUM
comando per risolvere tutti e tre i problemi precedenti.
SQLite prima copia i dati all'interno di un file di database in un database temporaneo. Questa operazione deframmenta gli oggetti del database, ignora gli spazi liberi e ricomprime le singole pagine. Quindi, SQLite copia il contenuto del file di database temporaneo nel file di database originale. Il file di database originale viene sovrascritto.
Perché il VACUUM
Il comando ricostruisce il database, è possibile utilizzarlo per modificare alcuni parametri di configurazione specifici del database come la dimensione della pagina, il formato della pagina e la codifica predefinita. Per fare ciò, imposti nuovi valori usando pragma e quindi pulisci il database.
Il VACUUM
di SQLite comando
Il VACUUM
il comando non modifica il contenuto del database tranne i valori rowid. Se usi INTEGER PRIMARY KEY
colonna, il VACUUM
non cambia i valori di quella colonna. Tuttavia, se utilizzi rowid senza alias, il VACUUM
il comando ripristinerà i valori rowid. Oltre a modificare i valori rowid, il VACUUM
comando crea anche l'indice da zero.
È buona norma eseguire il VACUUM
comando periodicamente, specialmente quando elimini tabelle o indici di grandi dimensioni da un database.
È importante notare che il VACCUM
il comando richiede l'archiviazione per contenere il file originale e anche la copia. Inoltre, il VACUUM
comando richiede l'accesso esclusivo al file di database. In altre parole, il VACUUM
il comando non verrà eseguito correttamente se il database ha un'istruzione SQL in sospeso o una transazione aperta.
Attualmente, a partire dalla versione 3.9.2, puoi eseguire VACUUM
comando sul main
database, non il file di database allegato.
Anche se SQLite abilita la modalità di vuoto automatico che attiva automaticamente il processo di vuoto con alcune limitazioni. È buona norma eseguire VACUUM
comando manualmente.
Come eseguire SQLite VACUUM
comando
Quanto segue mostra come eseguire il VACUUM
comando:
VACUUM;
Code language: SQL (Structured Query Language) (sql)
Assicurati che non ci siano transazioni aperte mentre esegui il comando.
La seguente istruzione abilita la modalità di vuoto automatico completo:
PRAGMA auto_vacuum = FULL;
Code language: SQL (Structured Query Language) (sql)
Per abilitare il vuoto incrementale, utilizzare la seguente istruzione:
PRAGMA auto_vacuum = INCREMENTAL;
Code language: SQL (Structured Query Language) (sql)
La seguente istruzione disabilita la modalità di vuoto automatico:
PRAGMA auto_vacuum = NONE;
Code language: SQL (Structured Query Language) (sql)
VACUUM
con un INTO
clausola
Ecco la sintassi del VACUUM
con INTO
clausola:
VACUUM schema-name INTO filename;
Code language: SQL (Structured Query Language) (sql)
Il VACUUM
istruzione con un INTO
La clausola mantiene inalterato il file di database originale e crea un nuovo database con il nome file specificato. Il nuovo database conterrà lo stesso contenuto logico del database originale, ma completamente svuotato.
Il filename
nel INTO
La clausola può essere qualsiasi espressione SQL che restituisce una stringa. Deve essere il percorso di un file che non esiste o di un file vuoto, oppure il VACUUM INTO
comando risulterà in un errore.
Il VACUUM
comando è molto utile per generare copie di backup di un database live. È transazionale sicuro, il database generato è uno snapshot coerente del database originale. Tuttavia, se un arresto non pianificato o un'interruzione di alimentazione interrompe il comando, il database generato potrebbe essere danneggiato.
La seguente istruzione utilizza il VACUUM INTO
comando per generare un nuovo database con il nome del file chinook_backup.db
i cui dati vengono copiati da del main
schema del chinook
banca dati:
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
Code language: JavaScript (javascript)
In questo tutorial, hai imparato perché devi usare SQLite VACUUM
comando e come eseguirlo per ottimizzare il database.