Мгновенная инициализация файлов базы данных
Область применения:
SQL Server (все поддерживаемые версии)
В этой статье вы узнаете о быстрой инициализации файлов и о том, как включить ее для ускорения роста файлов базы данных 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) и 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 и в журнал приложения.
Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds. Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.
Длительное автоматическое увеличение размера базы данных или файла журнала транзакций может привести к проблемам с производительностью запросов. Это обусловлено тем, что операция, требующая автоматического увеличения размера файла, будет приостановлена на ресурсах, таких как блокировки или кратковременные блокировки, по мере увеличения размера файла. Длительные ожидания кратковременных блокировок могут отображаться для страниц распределения. Операция, требующая длительного автоматического увеличения, будет отображать тип ожидания PREEMPTIVE_OS_WRITEFILEGATHER.