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

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

12 голосов | спросил DBAWaffle 12 AM000000120000002431 2013, 00:43:24

1 ответ


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 являются единицей усечения, они также определяют размеры резервных копий журнала, как описано в Блог Кима .

ответил Simon Righarts 12 AM00000030000001531 2013, 03:59:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132