Я отчасти случайный администратор баз данных, будучи разработчиком, унаследовавшим пару серверов баз данных (2005 и 2008 гг.) От кого-то, кто мало знал об администрировании баз данных и, похоже, еще меньше интересовался изучением этой темы.
Я учусь по ходу дела и сейчас пытаюсь выяснить файлы журнала транзакций.
Все наши базы данных были настроены с простой моделью восстановления и автоусадкой. Я понял, что использование автоусадки обычно ужасная идея, но, насколько я понимаю, это было сделано для того, чтобы не дать журналам транзакций выйти из-под контроля. (Автосжатие фактически сокращает файл (ы) журнала или только DB?)
Я узнал об этом в SQL Server 2012, и мне было интересно, правда ли это о 2005 и / или 2008 году, и что именно это означает: «Когда база данных использует простую модель восстановления, компонент Database Engine усекает журнал транзакций после контрольной точки. [. ..] Database Engine запускает автоматическую контрольную точку в простой модели восстановления, когда виртуальный журнал заполняется на 70 процентов ». Где указан размер виртуального журнала?
Я хочу отключить автоматическое сжатие во всех базах данных, но прежде чем я это сделаю, я должен знать, что файлы журнала не будут быстро выходить из-под контроля.
Любая помощь будет принята с благодарностью.
источник
Ответы:
Один файл журнала транзакций имеет физический размер (который вы видите на диске), и он также разбит внутри физического файла на логические разделы, называемые виртуальными файлами журнала (VLF).
И автоматическое увеличение, и автоматическое сжатие работают с файлом журнала физических транзакций.
Усечение журнала транзакций (также называемое «очисткой журнала») работает с логическими разделами журнала транзакций (VLF) и не влияет на размер физического файла. Эта часть часто является предметом путаницы.
Файл журнала всегда должен расти, чтобы вместить большую транзакцию; отключение автоматического сжатия приведет к тому, что файл журнала получит максимальный необходимый размер, вместо физического уменьшения его размера.
Если у вас нет крупных транзакций, будет безопасно отключить автоматическое сжатие; файлы журнала не будут расти без привязки, как это было бы, если бы база данных была
FULL
илиBULK_LOGGED
вы не выполняли резервное копирование журнала транзакций.Это поведение одинаково для SQL Server 2005+.
источник
Итак, вот что я нашел после прочтения других ответов здесь и проведения некоторых собственных исследований:
Вопрос: «Сжатие ли в действительности сжимает файл (ы) журнала или только БД?» A: Из того, что я понимаю: да, это так. Автоусадка устанавливается на уровне базы данных и влияет на все файлы (это видно, если щелкнуть правой кнопкой мыши базу данных -> свойства -> файлы или выполнить запрос 1). Autogrow, однако, работает на уровне файлов.
Q: "Где указан размер виртуального журнала?" A: Смотрите ответ Джона Зигеля и ссылку Ремуса. Чтобы увидеть физический и логический размер журнала, используйте запрос 2
Одна из проблем заключается в том, что если в базе данных был активирован режим полного восстановления, который был увеличен до большого размера, а затем был изменен режим восстановления на простой, контрольная точка не будет запущена, поскольку VLF автоматически сработал. Можно попытаться решить эту проблему (см. Ответ Ремуса о возможных проблемах с заголовком / концом файлов журнала), выполнив запрос 3, который уменьшит размер файла журнала до того размера, который был при его создании.
Запросы:
1)
2)
3)
источник
Как вы указали в своем вопросе, в SQL 2005 и 2008 после контрольной точки файл журнала транзакций также будет усечен.
Мое предложение было бы установить полную модель восстановления и создать задание для резервного копирования из файла журнала транзакций. Это задание может быть запланировано в вашей базе данных и будет обрезать журнал транзакций после создания резервной копии. Он автоматически обрежет файл журнала для вас. Пожалуйста, посмотрите на ссылки ниже:
SQL Server 2005: http://technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx
SQL Server 2008: http://technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx
источник