Почему в моем журнале SQL Server остается 99% свободного места после полного предупреждения?

Удаляя большое количество записей, я получаю эту ошибку:

Журнал транзакций для базы данных "databasename" заполнен

Я нашел этот ответ очень полезным, он рекомендует:

  1. Щелкните правой кнопкой мыши свою базу данных в SQL Server Manager и откройте страницу "Параметры".
  2. Переключить модель восстановления с полной на простую
  3. Щелкните правой кнопкой мыши базу данных еще раз. Выберите Tasks Shrink, Files. Уменьшите файл журнала до нужного размера (я обычно придерживаюсь 20-25% размера файлов данных).
  4. Вернитесь к полной модели восстановления
  5. Сделайте полную резервную копию базы данных прямо сейчас

Вопрос: на шаге 3, когда я иду в shrink > files и выбрать log от file type выпадающее меню, оно говорит мне, что 99% выделенного пространства свободно.

Из ~4500 МБ выделенного пространства освобождается ~4400 МБ (размер файла данных ~3000 МБ).

Значит ли это, что мне пора идти, и нет необходимости сокращаться?

Я не понимаю этого. Почему это так, учитывая предупреждение, которое я получил изначально?

1 ответ

Решение

Я не любитель гипербол, но о журналах транзакций SQL Server написаны буквально миллиарды статей.

Дайджест-версия Reader: если вы удаляете 1 000 000 строк за раз, журналы будут увеличиваться, потому что он записывает эти 1 000 000 удалений на случай, если придется откатить транзакцию. Пространство, необходимое для хранения этих записей, не освобождается, пока транзакция не будет зафиксирована. Если ваши журналы недостаточно велики, чтобы вместить 1 000 000 удалений, журнал заполнится, выдаст ту ошибку, которую вы видели, и откатит всю транзакцию. Тогда все это пространство, скорее всего, будет освобождено. Теперь у вас есть большой журнал с большим количеством свободного места.

Вы, вероятно, достигнете предела для вашего файла журнала в 4,5 ГБ, и он не станет больше. Чтобы не заполнять ваши журналы в будущем, разбивайте свои транзакции на меньшие суммы, например, удаляя 1000 записей за раз. Операция сжатия уменьшает физический размер файла, например, с 4,5 ГБ до 1 ГБ.

https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-2017

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