Насколько важны VLF журнала транзакций для производительности?

12

Насколько важны VLF при рассмотрении производительности базы данных? Что бы описать оптимальную ситуацию для VLF?

the_good_pony
источник
Для дальнейшего чтения, смотрите мой вопрос на dba.stackexchange.com/questions/25408/…
Макс Вернон,
Круто - я вижу, что это полезно для отчетности по производительности
the_good_pony
1
@DBAWaffle См. Эксперименты с VLF-компонентами SQL Server, часть 1 от Гленна Берри -> sqlskills.com/blogs/glenn/…
Кин Шах,

Ответы:

17

Что такое виртуальный файл журнала?

SQL Server делит файл журнала транзакций для каждой базы данных на более мелкие фрагменты, называемые «виртуальными файлами журнала» (или сокращенно VLF). Их основная функция - маркеры усечения при резервном копировании журнала, т. Е. SQL Server будет очищать (и отмечать доступные для повторного использования) VLF, которые полностью пусты. В MSDN есть раздел «Журнал транзакций - физическая архитектура» .

От чего зависит количество VLF?

Каждый раз, когда файл журнала увеличивается (с помощью автоматического роста или ручного увеличения), новый раздел файла журнала делится на несколько VLF-файлов, исходя исключительно из размера нового раздела (существующий журнал транзакций остается один). Таким образом, небольшие настройки автоматического роста (то есть 10-процентный автоматический рост, который является настройкой по умолчанию) вызовут создание большого количества VLF.

Каковы последствия большого количества VLF?

Основная проблема, которую вызывает большое количество VLF:

  • Медленное восстановление (восстановление - это фаза восстановления базы данных, когда завершенные транзакции записываются на страницы данных, а незавершенные транзакции откатываются).
  • Низкая производительность чтения журнала в настройке зеркального отображения базы данных.
  • Низкая производительность при создании моментального снимка базы данных (обратите внимание, что это также включает в себя определенные функции, DBCCпоскольку они используют моментальные снимки базы данных в фоновом режиме, чтобы облегчить проверку согласованности без блокировки).

Как я могу узнать, сколько VLF есть в моей базе данных?

DBCC LOGINFOвернет 1 строку для каждого VLF в журнале транзакций вашей базы данных. В этом вопросе есть несколько полезных сценариев для применения этого во всех базах данных на сервере.

Сколько VLF слишком много?

Это суждение, которое вы должны сделать для себя. Мое эмпирическое правило гласит, что с 50 лет не стоит возиться, а с более чем 100 (или около того) я исправляю настройки автоматического роста и мысленно отмечаю (в следующем окне обслуживания) уменьшить и снова вырастить журнал (как показано ниже) ,

Помогите! У меня одиннадцать миллиардов VLF, и восстановление моей базы занимает весь день!

Краткое описание (из блога Кимберли Триппа ):

  • Убедитесь, что вы являетесь единственным активным соединением в базе данных (сделайте это в течение периода обслуживания)
  • Резервное копирование журнала транзакций на диск (с использованием BACKUP LOG)
  • Запустите DBCC SHRINKFILEс, TRUNCATEONLYчтобы уменьшить размер файла журнала до минимально возможного.
  • Запустите, ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizeчтобы изменить размер журнала транзакций за один шаг **.

** Примечание. Если у вас очень большой файл журнала (десятки ГБ или более), вы можете изменить размер за несколько шагов, чтобы получить соответствующее количество VLF-файлов соответствующего размера, чтобы избежать чрезмерного «непродолжительного» резервного копирования журнала. Поскольку VLF - это единица усечения, они также определяют размеры резервной копии журнала, как подробно описано в блоге Кима .

Саймон Ригартс
источник
Спасибо, как вы думаете, что несколько VLF более очевидно будут препятствовать производительности в среде с высоким OLTP, где данные регулярно изменяются, и проходит большое количество коммитов?
the_good_pony
Большое количество VLF действительно заметно только в ситуациях, которые я описал выше (восстановление, моментальные снимки, зеркалирование). Они могут немного снизить производительность в среде OLTP, но лишь незначительно.
Саймон Ригартс
1
Для меня восстановление в течение 20 с лишним часов убедило меня в важности поддержания низкого (менее 1000) количества VLF.
Макс Вернон
@SimonRigharts Мне любопытно. Влияет ли большое количество VLF на производительность обычных транзакций вообще? Или это влияет только на резервное копирование и восстановление?
Крис Олдрич
@ChrisAldrich Может быть небольшой уровень накладных расходов на транзакцию, если она охватывает границу VLF (но если есть, я не слышал об этом), но, как подробно описано в вопросе, единственный раз, когда вы действительно заметите влияние большое количество VLFs происходит во время восстановления, зеркалирования или снимков.
Саймон Ригартс