Разъяснение относительно journal_size_limit в SQLite

Если я установлю journal_size_limit = 67110000 (64 МиБ) я смогу:

  1. работать с / совершать транзакции над этим значением (несколько маловероятно)
  2. быть в состоянии успешно выполнить VACUUM (даже если база данных имеет значение 3 ГиБ или более)

Команда VACUUM работает, копируя содержимое базы данных во временный файл базы данных, а затем перезаписывая оригинал содержимым временного файла. При перезаписи оригинала используется журнал отката или файл WAL с опережением записи, как и для любой другой транзакции базы данных. Это означает, что при VACUUMing базе данных в свободном дисковом пространстве требуется вдвое больше исходного файла базы данных.

Это не совсем ясно в документации, и я был бы признателен, если бы кто-то мог сказать мне наверняка.

1 ответ

Решение

journal_size_limit не является верхним пределом в журнале транзакций; это верхний предел для неактивного журнала транзакций.

После завершения транзакции журнал не нужен, но не удаление журнала может ускорить процесс, поскольку файловой системе не нужно освобождать эти данные и затем перераспределять их для следующей транзакции.

Целью этого параметра является ограничение размера неиспользуемых данных журнала.

Другие вопросы по тегам