Команда VACUUM работает, копируя содержимое базы данных во временный файл базы данных, а затем перезаписываяоригинал с содержимым временного файла.При перезаписи оригинала используется журнал отката или WAL-файл с опережением записи, как и для любой другой транзакции базы данных.Это означает, что при VACUUMing базе данных в свободном дисковом пространстве требуется вдвое больше размера исходного файла базы данных.
Команда VACUUM INTO работает так же, за исключением того, что она использует файл, названный в INTOвместо временной базы данных и пропускает шаг копирования вакуумной базы данных поверх исходной базы данных.
Команда VACUUM может изменить ROWID записей в любых таблицах, которые не имеют явного INTEGER PRIMARYКЛЮЧ.
VACUUM завершится ошибкой, если в соединении с базой данных есть открытая транзакция, которая пытается запустить VACUUM.Незаконченные операторы SQL обычно удерживают открытую транзакцию чтения, поэтому VACUUM может завершиться ошибкой, если в одном соединении есть незавершенные операторы SQL.VACUUM (но не VACUUM INTO) является операцией записи, поэтому, если другое соединение с базой данных удерживает блокировку, предотвращающую запись, то VACUUM завершится ошибкой.
Альтернатива использованию команды VACUUM для восстановления пространства после того, как данные имеютбыл удален режим автоматического вакуума, включенный с помощью прагмы auto_vacuum.Когда auto_vacuum включен для базы данных, свободные страницы могут быть восстановлены после удаления данных, что приведет к сжатию файла без перестройки всей базы данных с использованием VACUUM.Однако использование auto_vacuum может привести к дополнительной фрагментации файла базы данных.И auto_vacuum не сжимает частично заполненные страницы базы данных, как VACUUM.