SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite VACUUM

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.