Podsumowanie :w tym samouczku wyjaśnimy, dlaczego musisz użyć SQLite VACUUM
i pokaż, jak go użyć do optymalizacji pliku bazy danych.
Dlaczego potrzebujesz SQLite VACUUM
polecenie
Po pierwsze, po usunięciu obiektów bazy danych, takich jak tabele, widoki, indeksy i wyzwalacze lub usunięciu danych z tabel, rozmiar pliku bazy danych pozostaje niezmieniony. Ponieważ SQLite po prostu oznacza usunięte obiekty jako wolne i rezerwuje je do przyszłych zastosowań. W rezultacie rozmiar pliku bazy danych zawsze rośnie.
Po drugie, kiedy wstawiasz lub usuwasz dane z tabel, indeksy i tabele ulegają fragmentacji, szczególnie w przypadku bazy danych, która ma dużą liczbę wstawień, aktualizacji i usunięć.
Po trzecie, operacje wstawiania, aktualizowania i usuwania tworzą nieużywany blok danych na poszczególnych stronach bazy danych. Zmniejsza liczbę wierszy, które można przechowywać na jednej stronie. Dlatego zwiększa liczbę stron do przechowywania tabeli. Z tego powodu zwiększa obciążenie pamięci dla tabeli, zajmuje więcej czasu na odczyt/zapis i zmniejsza wydajność pamięci podręcznej.
SQLite zapewnia VACUUM
polecenie, aby rozwiązać wszystkie trzy powyższe problemy.
SQLite najpierw kopiuje dane z pliku bazy danych do tymczasowej bazy danych. Ta operacja defragmentuje obiekty bazy danych, ignoruje wolne miejsca i ponownie pakuje poszczególne strony. Następnie SQLite kopiuje zawartość tymczasowego pliku bazy danych z powrotem do oryginalnego pliku bazy danych. Oryginalny plik bazy danych zostanie nadpisany.
Ponieważ VACUUM
Polecenie odbudowuje bazę danych, można go użyć do zmiany niektórych parametrów konfiguracyjnych specyficznych dla bazy danych, takich jak rozmiar strony, format strony i domyślne kodowanie. Aby to zrobić, ustaw nowe wartości za pomocą pragmy, a następnie odkurz bazę danych.
SQLite VACUUM
polecenie
VACUUM
Polecenie nie zmienia zawartości bazy danych z wyjątkiem wartości wierszy. Jeśli używasz INTEGER PRIMARY KEY
kolumna VACUUM
nie zmienia wartości tej kolumny. Jeśli jednak używasz rowid bez aliasów, VACUUM
polecenie zresetuje wartości wierszy. Oprócz zmiany wartości wierszy, VACUUM
polecenie również buduje indeks od podstaw.
Dobrą praktyką jest wykonanie VACUUM
polecenie okresowo, zwłaszcza gdy usuwasz duże tabele lub indeksy z bazy danych.
Należy pamiętać, że VACCUM
polecenie wymaga pamięci do przechowywania oryginalnego pliku, a także kopii. Również VACUUM
polecenie wymaga wyłącznego dostępu do pliku bazy danych. Innymi słowy, VACUUM
polecenie nie zostanie uruchomione pomyślnie, jeśli baza danych zawiera oczekującą instrukcję SQL lub otwartą transakcję.
Obecnie, od wersji 3.9.2, możesz uruchomić VACUUM
polecenie na main
bazy danych, a nie dołączonego pliku bazy danych.
Mimo że SQLite włącza tryb automatycznego odkurzania, który automatycznie uruchamia proces odkurzania z pewnymi ograniczeniami. Dobrą praktyką jest uruchomienie VACUUM
polecenie ręcznie.
Jak uruchomić SQLite VACUUM
polecenie
Poniżej pokazano, jak uruchomić VACUUM
polecenie:
VACUUM;
Code language: SQL (Structured Query Language) (sql)
Upewnij się, że nie ma otwartej transakcji podczas wykonywania polecenia.
Poniższa instrukcja włącza pełny tryb automatycznego odkurzania:
PRAGMA auto_vacuum = FULL;
Code language: SQL (Structured Query Language) (sql)
Aby włączyć przyrostową próżnię, użyj następującej instrukcji:
PRAGMA auto_vacuum = INCREMENTAL;
Code language: SQL (Structured Query Language) (sql)
Poniższa instrukcja wyłącza tryb automatycznego odkurzania:
PRAGMA auto_vacuum = NONE;
Code language: SQL (Structured Query Language) (sql)
VACUUM
z INTO
klauzula
Oto składnia VACUUM
z INTO
klauzula:
VACUUM schema-name INTO filename;
Code language: SQL (Structured Query Language) (sql)
VACUUM
instrukcja z INTO
Klauzula zachowuje oryginalny plik bazy danych bez zmian i tworzy nową bazę danych o określonej nazwie pliku. Nowa baza danych będzie zawierać tę samą zawartość logiczną, co oryginalna baza danych, ale w pełni odkurzona.
filename
w INTO
Klauzula może być dowolnym wyrażeniem SQL, którego wynikiem jest łańcuch. Musi to być ścieżka do pliku, który nie istnieje lub do pustego pliku, lub VACUUM INTO
polecenie spowoduje błąd.
VACUUM
Polecenie jest bardzo przydatne do tworzenia kopii zapasowych działającej bazy danych. Jest bezpieczny transakcyjnie, a wygenerowana baza danych jest spójną migawką oryginalnej bazy danych. Jeśli jednak nieplanowane wyłączenie lub utrata zasilania przerwie wykonanie polecenia, wygenerowana baza danych może zostać uszkodzona.
Poniższa instrukcja używa VACUUM INTO
polecenie do wygenerowania nowej bazy danych o nazwie pliku chinook_backup.db
którego dane są kopiowane z main
schemat chinook
baza danych:
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
Code language: JavaScript (javascript)
W tym samouczku dowiedziałeś się, dlaczego musisz używać SQLite VACUUM
polecenie i jak go uruchomić, aby zoptymalizować bazę danych.