Почему в моем журнале SQL Server остается 99% свободного места после полного предупреждения? - PullRequest
0 голосов
/ 25 октября 2018

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 25 октября 2018

Я не за гиперболу, но есть буквально миллиарды статей, написанных о журналах транзакций 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

...