14.10.25

Заблуждения вокруг мгновенной инициализации файлов

Автор: Paul Randal, Misconceptions around instant file initialization

Каждый раз, когда я веду курс, меня удивляет, сколько администраторов баз данных не знают о мгновенной инициализации файлов (instant file initialization). Не желая повторять публикации, уже написанные другими, кратко: эта возможность позволяет создавать или увеличивать файл «мгновенно», без заполнения нового пространства в файле нулями. Это особенно полезно в сценариях аварийного восстановления, когда перед восстановлением базы данные файлы могут понадобиться впервые — с включённой мгновенной инициализацией исключается лишняя задержка. Подробности см. в записи Кимберли «Instant Initialization – What, Why and How?».

А теперь — к причине появления это статьи: хочу развеять несколько заблуждений, которые продолжаю слышать.

Заблуждение: мгновенная инициализация файлов включена по умолчанию. Нет. С её включением связан небольшой риск безопасности (на системах, где диски с файлами данных SQL Server совместно используются чувствительными не‑MSSQL файлами), поэтому по умолчанию она отключена и требует назначения разрешения SE_MANAGE_VOLUME_NAME (более известного как Perform Volume Maintenance Tasks). Как включить — см. статью Кимберли.

Заблуждение: мгновенная инициализация доступна только в редакции Enterprise. Нет.

Заблуждение: мгновенная инициализация применяется и к журналам транзакций. Нет. Файлы журнала нельзя было инициализировать мгновенно — моя публикация «Search Engine Q&A #24: Why can’t the transaction log use instant initialization?» объясняет почему.

Заблуждение: если мгновенная инициализация не включена, нулевое заполнение выполняет NTFS. Нет. Это делает SQL Server, потому что он умеет делать это быстрее, чем NTFS. Когда мгновенная инициализация включена, SQL Server пропускает заполнение нулями и вместо этого вызывает API Windows SetFileValidData. Для вызова этого API требуется специальное разрешение. Подробнее в MSDN: Функция SetFileValidData (fileapi.h). Признаю — это потребовало вспомнить и покопаться в MSDN.

Заблуждение: при включённой мгновенной инициализации страницы перезаписываются нулями перед записью. Нет. На диск записывается полный образ 8КБ, который перезаписывает неинициализированный 8КБ участок файла. Ещё один вариант этого заблуждения — будто бы если страница выделена из экстента в мгновенно инициализированном файле, то невыделенные страницы экстента зануляются — это тоже неверно.


Комментариев нет:

Отправить комментарий