Мгновенная инициализация файлов базы данных
В этой статье вы узнаете о быстрой инициализации файлов и о том, как включить ее для ускорения роста файлов базы данных SQL Server.
По умолчанию файлы данных и журналов инициализируются, чтобы перезаписать все существующие данные на диске, оставшиеся после удаленных файлов. Файлы данных и журналов сначала инициализируются путем обнуления (заполнения нулями) при выполнении следующих операций:
- создавать базу данных;
- Добавление файлов данных и журналов к существующей базе данных.
- Увеличение размера существующего файла (включая операции автоувеличения).
- Восстановление базы данных или файловой группы.
В SQL Server (только для файлов данных) мгновенная инициализация файлов (IFI) позволяет быстрее выполнять ранее упомянутые файловые операции, так как она освобождает занятое место на диске, не заполняя его нулями. Вместо этого содержимое диска перезаписывается, поскольку в файлы записываются новые данные. Файлы журналов не могут быть инициализированы мгновенно.
Включить мгновенную инициализацию файлов
Мгновенная инициализация файлов доступна, только если стартовой учетной записи службы SQL Server предоставлено разрешение SE_MANAGE_VOLUME_NAME. Участники группы администраторов Windows обладают этим правом и могут предоставить его другим пользователям, добавив их в политику безопасности Выполнение задач обслуживания томов .
Некоторые условия, например прозрачное шифрование данных, могут не допускать мгновенную инициализацию файлов.
Начиная с SQL Server 2016 (13.x);, это разрешение можно предоставлять учетной записи службы во время установки.
При использовании установки из командной строки добавьте аргумент /SQLSVCINSTANTFILEINIT либо установите флажок Предоставить право на выполнение задач обслуживания тома службе ядра СУБД SQL Server в мастере установки.
Предоставление учетной записи разрешения Perform volume maintenance tasks .
На компьютере, где будет создан файл данных, откройте приложение Локальная политика безопасности ( secpol.msc ).
Разверните на левой панели узел Локальные политики, а затем щелкните пункт Назначение прав пользователей.
На правой панели дважды щелкните Выполнение задач по обслуживанию томов.
Выберите пункт Добавить пользователя или группу и добавьте учетную запись, от имени которой запущена служба SQL Server.
Нажмите кнопку Применить и закройте все диалоговые окна Локальная политика безопасности .
Перезапустите службу SQL Server.
Проверьте журнал ошибок SQL Server при запуске.
Применимо к: SQL Server (начиная с версии SQL Server 2012 (11.x) с пакетом обновления 4 (SP4), SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) и версий SQL Server 2016 (13.x); и выше).
Если учетной записи запуска службы SQL Server предоставлено разрешение SE_MANAGE_VOLUME_NAME, регистрируется подобное информационное сообщение:
Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.
Если учетной записи запуска службы SQL Serverне предоставлено разрешение SE_MANAGE_VOLUME_NAME, регистрируется подобное информационное сообщение:
Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.
Вы можете использовать столбец instant_file_initialization_enabled в динамическом административном представлении sys.dm_server_services для определения того, включена ли мгновенная инициализация файлов.
Вопросы безопасности
Мы советуем включить мгновенную инициализацию файлов, так как преимущества перевешивают риски безопасности.
При использовании мгновенной инициализации файлов удаленное содержимое диска перезаписывается только по мере того, как в файлы записываются новые данные. Поэтому доступ к удаленному содержимому может получить неавторизованный субъект, пока в эту область файла данных не будут записаны другие данные.
По мере подключения файла базы данных к экземпляру SQL Server риск раскрытия информации уменьшается благодаря списку управления доступом на уровне пользователей (DACL) в файле. DACL разрешает доступ к файлу только учетной записи службы SQL Server и локальному администратору. Но при отсоединении файла доступ к нему может получить пользователь или служба, которым не предоставлено разрешение SE_MANAGE_VOLUME_NAME.
Аналогичные соображения существуют в следующих случаях.
Создается резервная копия базы данных. Если файл резервной копии не защищен с помощью соответствующего DACL, удаленное содержимое может стать доступным неавторизованному пользователю или службе.
Файл расширяется с помощью IFI. Администратор SQL Server потенциально может получить доступ к содержимому необработанных страниц и просматривать ранее удаленное содержимое.
Файлы базы данных размещаются в сети хранения. Она может всегда представлять новые страницы в виде предварительно инициализированных, что способно создавать излишнюю нагрузку, так как операционной системе требуется инициализировать эти страницы повторно.
Если вероятность раскрытия удаленного содержимого является серьезной проблемой, необходимо выполнить одно следующее действие или оба.
Всегда проверяйте, что все отсоединенные файлы данных и резервные копии имеют ограничивающие DACL.
Отключите быструю инициализацию для экземпляра SQL Server. Для этого отмените SE_MANAGE_VOLUME_NAME из стартовой учетной записи службы SQL Server.
Отключение увеличивает время выделения файлов для файлов данных и влияет только на создаваемые или увеличивающиеся в размере файлы после отзыва прав пользователя.
Право пользователя SE_MANAGE_VOLUME_NAMEПраво пользователя SE_MANAGE_VOLUME_NAME можно назначить в средствах администрирования Windows с помощью приложения Локальная политика безопасности. В разделе Локальные политики выберите Назначение прав пользователя и измените свойство Выполнение задач по обслуживанию томов.
Вопросы производительности
Процесс инициализации файла базы данных записывает нули в новые регионы файла при инициализации. Длительность этого процесса зависит от размера инициализированной части файла и времени отклика и емкости системы хранения. Если инициализация занимает много времени, могут отобразиться следующие сообщения, записанные в журнал ошибок SQL Server и в журнал приложения.
Длительное автоматическое увеличение размера базы данных или файла журнала транзакций может привести к проблемам с производительностью запросов. Это обусловлено тем, что операция, требующая автоматического увеличения размера файла, будет приостановлена на ресурсах, таких как блокировки или кратковременные блокировки, по мере увеличения размера файла. Длительные ожидания кратковременных блокировок могут отображаться для страниц распределения. Для операции, требующей длительного автоматического увеличения размера, будет показан тип ожидания PREEMPTIVE_OS_WRITEFILEGATHER.