Поделиться через


Инициализация мгновенного файла базы данных

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

В этой статье вы узнаете о мгновенной инициализации файлов (IFI) и о том, как ускорить рост файлов базы данных SQL Server.

По умолчанию файлы данных и журналов инициализируются, чтобы перезаписать все существующие данные на диске, оставшиеся после удаленных файлов. Файлы данных и журналов сначала инициализируются путем обнуления (заполнения нулями) при выполнении следующих операций:

  • Создается база данных .
  • Добавление файлов данных и журналов к существующей базе данных.
  • Увеличение размера существующего файла (включая операции автоувеличения).
  • Восстановление базы данных или файловой группы.

В SQL Server мгновенное инициализация файлов позволяет ускорить выполнение ранее упомянутых операций с файлами, так как оно освобождает используемое дисковое пространство без заполнения этого пространства нулями. Вместо этого старое содержимое диска перезаписывается, так как новые данные записываются в файлы.

В База данных SQL Azure и Управляемый экземпляр SQL Azure мгновенное инициализация файлов доступна только для файлов журнала транзакций.

Мгновенное инициализация файлов и журнал транзакций

Область применения: SQL Server 2022 (16.x) и более поздних версий, а также База данных SQL Azure и Управляемый экземпляр SQL Azure.

Исторически файлы журнала транзакций не могут быть инициализированы мгновенно. Однако начиная с SQL Server 2022 (16.x) (все выпуски) и в База данных SQL Azure и Управляемый экземпляр SQL Azure, автоматическое увеличение журналов транзакций до 64 МБ может воспользоваться мгновенным инициализацией файлов. Размер автоматического увеличения по умолчанию для новых баз данных составляет 64 МБ. События автоматического увеличения файла журнала транзакций, превышающие 64 МБ, не могут воспользоваться мгновенным инициализацией файла.

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

  • Мгновенная инициализация файлов используется для уровней "Общего назначения" и "Критически важного для бизнеса" Azure SQL Database и Azure SQL Managed Instance, только для ускорения увеличения файлов журнала транзакций.

  • Мгновенное инициализация файлов не настраивается в База данных SQL Azure и Управляемый экземпляр SQL Azure.

Включить мгновенную инициализацию файлов

Мгновенная инициализация файлов данных доступна только в том случае, если учетная запись службы или идентификатор безопасности службы ядра СУБД предоставлена привилегия SE_MANAGE_VOLUME_NAME. Члены группы администраторов Windows имеют это право и могут предоставить его другим пользователям, добавив их в политику безопасности выполнения задач по обслуживанию томов. Привилегия SE_MANAGE_VOLUME_NAME не требуется для мгновенной инициализации файлов при событиях роста с максимальным размером до 64 МБ в журнале транзакций, введенном в выпуске SQL Server 2022 (16.x).

Рекомендуется предоставить привилегию SE_MANAGE_VOLUME_NAMEидентификатору безопасности службы службы службы ядра СУБД. Это гарантирует, что грант остается даже при изменении учетной записи службы ядра СУБД. Дополнительные сведения см. в разделе "Использование идентификаторов безопасности службы" для предоставления разрешений службам в SQL Server.

Внимание

Некоторые функции, такие как прозрачное шифрование данных (TDE), могут препятствовать мгновенной инициализации файлов (IFI). В SQL Server 2022 (16.x) и более поздних версиях, а также в Базе данных SQL Azure и Управляемом экземпляре SQL Azure, IFI разрешено в журнале транзакций. Дополнительные сведения см. в разделе "Мгновенное инициализация файлов" и журнал транзакций.

В SQL Server 2016 (13.x) и более поздних версиях это разрешение можно предоставить идентификатору безопасности службы СУБД во время установки.

Если вы используете установку командной строки, добавьте /SQLSVCINSTANTFILEINIT аргумент или установите флажок Предоставить привилегию задачи "Выполнение обслуживания томов" в службе SQL Server ядро СУБД в мастере установки.

Чтобы предоставить учетной записи или SID службы политику безопасности Perform volume maintenance tasks:

  1. На компьютере, на котором будут созданы файлы данных, откройте приложение локальной политики безопасности (secpol.msc).

  2. В левой области разверните локальные политики и выберите назначение прав пользователя.

  3. На правой панели дважды щелкните Выполнение задач по обслуживанию томов.

  4. Выберите "Добавить пользователя или группу" и добавьте учетную запись службы ядра СУБД или ее идентификатор службы.

  5. Нажмите кнопку "Применить", а затем закройте все диалоговые окна "Локальная политика безопасности".

  6. Перезапустите службу ядра СУБД.

  7. Проверьте журнал ошибок ядра СУБД при запуске.

    Область применения: SQL Server (начиная с SQL Server 2012 (11.x) с пакетом обновления 4 (SP4), SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) и SQL Server 2016 (13.x) и более поздних версий.

    1. Если учетной записи службы ядра СУБД или его идентификатору безопасности службы предоставлена 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.
      
    2. Если учетная запись службы ядра СУБД или ее идентификатор безопасности службы не был предоставлен 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.
      

    Примечание.

    В SQL Server используйте значение 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 и учетной записи службы Database Engine и идентификатор безопасности его службы.

    Примечание.

    Отключение IFI увеличивает время роста файлов данных и влияет только на файлы, созданные или увеличенные после отзыва привилегии.

привилегия 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ожидания.