Каждый раз, когда я перезагружаю свой сервер, база данных всегда находится в режиме восстановления, и для ее нормальной работы требуется около 20 минут. Это всегда и только происходит, когда я перезагружаю сервер, поэтому у меня есть несколько вопросов ...
- Мне сказали, что это может быть вызвано большим файлом журнала? Может ли это быть правильным? Если нет, то какие могут быть другие причины?
- Мне нужно уменьшить пространство файла журнала, чтобы предотвратить восстановление. Что лучше: сжатие или усечение?
- Как я могу сжать или обрезать файл журнала / базу данных, чтобы уменьшить размер? Какой синтаксис?
В настоящее время я использую Microsoft SQL Server 2008.
Ответы:
У меня та же проблема, и я думаю, что я решил ее, но я не смог полностью проверить ее, чтобы подтвердить.
Я полагаю, что проблема связана с количеством VLF, которые есть в вашем журнале, а не с их размером. Если у вас большой лог-файл, вполне вероятно, что он рос органически за счет событий автоматического роста и что это не был намеренный запланированный рост. Если это так, у вас могут быть тысячи VLF в файлах журналов.
Вот запрос, чтобы увидеть, сколько VLF у вас есть, которые я использовал здесь :
Для дальнейшего объяснения того, что такое VLF, смотрите эту ссылку .
Я считаю, что проблема заключается в том, что с таким количеством VLF-серверов SQL-серверу требуется много времени, чтобы оценить их состояние и вывести базу данных из восстановления. Если вы уменьшите размер файла журнала до наименьшего возможного размера, часто до размера первого VLF, который был создан в файле журнала, то вы можете сразу же намеренно увеличить его снова и тем самым создать нужное количество VLF (что-то меньше 16).
Как только это будет завершено, я полагаю, вы сможете увидеть, что ваша база данных выходит из восстановления гораздо быстрее.
У меня не было возможности проверить отказоустойчивость наших производственных экземпляров после того, как я решил наши собственные проблемы с VLF, поэтому мне было бы очень любопытно, если бы вы могли подтвердить, что это является основной причиной проблемы. Экспериментально я видел, что время, необходимое для восстановления нашей промежуточной среды, значительно сократилось из-за этого, надеюсь, так оно и есть.
источник
Из этой статьи MSDN :
Как правило, не рекомендуется запускать какие-либо сжатые файлы DBCC в производственных базах данных. Также поведение усечения журнала изменилось с более ранних версий на 2008 (спасибо @Edward) - за этот блог :
Опять же, я упомяну, как часто вы делаете резервную копию базы данных? Как правило, регулярные резервные копии лучше всего управляют размером журнала.
источник
Уменьшение размера онлайн-журнала транзакций может решить проблему, т. Е. Ускорить подключение базы данных к сети, но вам следует подумать об аварийном восстановлении, прежде чем сделать это. Обратите внимание, что если вы используете простую модель восстановления, вы не сможете выполнить восстановление на определенный момент времени. С другой стороны, если вы используете модель полного восстановления, лучший способ сохранить размер оперативного журнала транзакций - это регулярно создавать резервные копии журнала транзакций (запланировать это).
Усечение журнала транзакций не освобождает пространство на физическом жестком диске, а только позволяет SQL Server повторно использовать это пространство для транзакций, которые произошли со времени последнего CHEKPOINT (с момента последнего резервного копирования журнала транзакций).
Если вы уменьшите базу данных, вы уменьшите размер файлов. Чтобы уменьшить базу данных MyDB на 15 процентов:
DBCC SHRINKDATABASE (MyDB, 15); ИДТИ
источник