Мгновенная инициализация файлов базы данныхDatabase Instant File Initialization

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

В этой статье вы узнаете о быстрой инициализации файлов и о том, как включить ее для ускорения роста файлов базы данных SQL Server.In this article, you learn about instant file initialization, and how to enable it to speed up growth for your SQL Server database files.

По умолчанию файлы данных и журналов инициализируются, чтобы перезаписать все существующие данные на диске, оставшиеся после удаленных файлов.By default, data and log files are initialized to overwrite any existing data left on the disk from previously deleted files. Файлы данных и журналов сначала инициализируются путем обнуления (заполнения нулями) при выполнении следующих операций:Data and log files are first initialized by zeroing the files (filling with zeros) when you perform the following operations:

  • создавать базу данных;Create a database.
  • Добавление файлов данных и журналов к существующей базе данных.Add data or log files, to an existing database.
  • Увеличение размера существующего файла (включая операции автоувеличения).Increase the size of an existing file (including autogrow operations).
  • Восстановление базы данных или файловой группы.Restore a database or filegroup.

В SQL ServerSQL Server мгновенная инициализация файлов (IFI) позволяет быстрее выполнять ранее упомянутые файловые операции, так как она освобождает занятое место на диске, не заполняя его нулями.In SQL ServerSQL Server, instant file initialization (IFI) allows for faster execution of the previously mentioned file operations, since it reclaims used disk space without filling that space with zeros. Вместо этого содержимое диска перезаписывается, поскольку в файлы записываются новые данные.Instead, disk content is overwritten as new data is written to the files. Файлы журналов не могут быть инициализированы мгновенно.Log files cannot be initialized instantaneously.

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

Мгновенная инициализация файлов доступна, только если стартовой учетной записи службы SQL ServerSQL Server предоставлено разрешение SE_MANAGE_VOLUME_NAME.Instant file initialization is only available if the SQL ServerSQL Server service startup account has been granted SE_MANAGE_VOLUME_NAME. Участники группы администраторов Windows обладают этим правом и могут предоставить его другим пользователям, добавив их в политику безопасности Выполнение задач обслуживания томов .Members of the Windows Administrator group have this right and can grant it to other users by adding them to the Perform Volume Maintenance Tasks security policy.

Важно!

Некоторые условия, например прозрачное шифрование данных, могут не допускать мгновенную инициализацию файлов.Some feature usage, such as Transparent Data Encryption (TDE), can prevent Instant File Initialization.

Примечание

Начиная с SQL Server 2016 (13.x);SQL Server 2016 (13.x), это разрешение можно предоставлять учетной записи службы во время установки.Starting with SQL Server 2016 (13.x);SQL Server 2016 (13.x), this permission can be granted to the service account at install time, during setup.

При использовании установки из командной строки добавьте аргумент /SQLSVCINSTANTFILEINIT либо установите флажок Предоставить право на выполнение задач обслуживания тома службе ядра СУБД SQL Server в мастере установки.If using the command prompt install, add the /SQLSVCINSTANTFILEINIT argument, or check the box Grant Perform Volume Maintenance Task privilege to SQL Server Database Engine Service in the installation wizard.

Предоставление учетной записи разрешения Perform volume maintenance tasks .To grant an account the Perform volume maintenance tasks permission:

  1. На компьютере, где будет создан файл данных, откройте приложение Локальная политика безопасности (secpol.msc).On the computer where the data file will be created, open the Local Security Policy application (secpol.msc).

  2. Разверните на левой панели узел Локальные политики, а затем щелкните пункт Назначение прав пользователей.In the left pane, expand Local Policies, and then click User Rights Assignment.

  3. На правой панели дважды щелкните Выполнение задач по обслуживанию томов.In the right pane, double-click Perform volume maintenance tasks.

  4. Выберите пункт Добавить пользователя или группу и добавьте учетную запись, от имени которой запущена служба SQL Server.Click Add User or Group and add the account that runs the SQL Server service.

  5. Нажмите кнопку Применить и закройте все диалоговые окна Локальная политика безопасности .Click Apply, and then close all Local Security Policy dialog boxes.

  6. Перезапустите службу SQL Server.Restart the SQL Server service.

  7. Проверьте журнал ошибок SQL ServerSQL Server при запуске.Check the SQL ServerSQL Server error log at startup.

    Применимо к: SQL ServerSQL Server (начиная с версии SQL Server 2012 (11.x)SQL Server 2012 (11.x) с пакетом обновления 4 (SP4), SQL Server 2014 (12.x)SQL Server 2014 (12.x) с пакетом обновления 2 (SP2) и версий SQL Server 2016 (13.x);SQL Server 2016 (13.x) и выше).Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 and SQL Server 2016 (13.x);SQL Server 2016 (13.x) and later).

    1. Если учетной записи запуска службы SQL ServerSQL Server предоставлено разрешение SE_MANAGE_VOLUME_NAME, регистрируется подобное информационное сообщение:If the SQL ServerSQL Server service startup account is granted SE_MANAGE_VOLUME_NAME, an informational message that resembles the following is logged:

      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. Если учетной записи запуска службы SQL ServerSQL Serverне предоставлено разрешение SE_MANAGE_VOLUME_NAME, регистрируется подобное информационное сообщение:If the SQL ServerSQL Server service startup account has not been granted SE_MANAGE_VOLUME_NAME, an informational message that resembles the following is logged:

      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 для определения того, включена ли мгновенная инициализация файлов.You can also use the column instant_file_initialization_enabled in the sys.dm_server_services DMV to identify if instant file initialization is enabled.

Вопросы безопасностиSecurity considerations

Мы советуем включить мгновенную инициализацию файлов, так как преимущества перевешивают риски безопасности.We recommend enabling instant file initialization as the benefits can outweigh the security risk.

При использовании мгновенной инициализации файлов удаленное содержимое диска перезаписывается только по мере того, как в файлы записываются новые данные.When using instant file initialization, the deleted disk content is overwritten only as new data is written to the files. Поэтому доступ к удаленному содержимому может получить неавторизованный субъект, пока в эту область файла данных не будут записаны другие данные.For this reason, the deleted content might be accessed by an unauthorized principal, until some other data writes on that specific area of the data file.

По мере подключения файла базы данных к экземпляру SQL ServerSQL Server риск раскрытия информации уменьшается благодаря списку управления доступом на уровне пользователей (DACL) в файле.While the database file is attached to the instance of SQL ServerSQL Server, this information disclosure risk is reduced by the discretionary access control list (DACL) on the file. DACL разрешает доступ к файлу только учетной записи службы SQL ServerSQL Server и локальному администратору.This DACL allows file access only to the SQL ServerSQL Server service account and the local administrator. Но при отсоединении файла доступ к нему может получить пользователь или служба, которым не предоставлено разрешение SE_MANAGE_VOLUME_NAME.However, when the file is detached, it may be accessed by a user or service that does not have SE_MANAGE_VOLUME_NAME.

Аналогичные соображения существуют в следующих случаях.Similar considerations exist when:

  • Создается резервная копия базы данных.The database is backed up. Если файл резервной копии не защищен с помощью соответствующего DACL, удаленное содержимое может стать доступным неавторизованному пользователю или службе.If the backup file is not protected with an appropriate DACL, the deleted content can become available to an unauthorized user or service.

  • Файл расширяется с помощью IFI.A file is grown using IFI. Администратор SQL Server потенциально может получить доступ к содержимому необработанных страниц и просматривать ранее удаленное содержимое.A SQL Server administrator could potentially access the raw page contents and see the previously deleted content.

  • Файлы базы данных размещаются в сети хранения.The database files are hosted on a storage area network. Она может всегда представлять новые страницы в виде предварительно инициализированных, что способно создавать излишнюю нагрузку, так как операционной системе требуется инициализировать эти страницы повторно.It is also possible that the storage area network always presents new pages as pre-initialized, and having the operating system re-initialize the pages might be unnecessary overhead.

Если вероятность раскрытия удаленного содержимого является серьезной проблемой, необходимо выполнить одно следующее действие или оба.If the potential for disclosing deleted content is a concern, you should take one or both of the following actions:

  • Всегда проверяйте, что все отсоединенные файлы данных и резервные копии имеют ограничивающие DACL.Always make sure that any detached data files and backup files have restrictive DACLs.

  • Отключите быструю инициализацию для экземпляра SQL ServerSQL Server.Disable instant file initialization for the instance of SQL ServerSQL Server. Для этого отмените SE_MANAGE_VOLUME_NAME из стартовой учетной записи службы SQL ServerSQL Server.To do so, revoke SE_MANAGE_VOLUME_NAME from the SQL ServerSQL Server service startup account.

    Примечание

    Отключение увеличивает время выделения файлов для файлов данных и влияет только на создаваемые или увеличивающиеся в размере файлы после отзыва прав пользователя.Disabling will increase allocation times for data files, and only affects files that are created or increased in size after the user right is revoked.

Право пользователя SE_MANAGE_VOLUME_NAMESE_MANAGE_VOLUME_NAME user right

Право пользователя SE_MANAGE_VOLUME_NAME можно назначить в средствах администрирования Windows с помощью приложения Локальная политика безопасности.The SE_MANAGE_VOLUME_NAME user privilege can be assigned in Windows Administrative Tools, Local Security Policy applet. В разделе Локальные политики выберите Назначение прав пользователя и измените свойство Выполнение задач по обслуживанию томов.Under Local Policies select User Right Assignment and modify the Perform volume maintenance tasks property.

Вопросы производительностиPerformance considerations

Процесс инициализации файла базы данных записывает нули в новые регионы файла при инициализации.The Database File initialization process writes zeros to the new regions of the file under initialization. Длительность этого процесса зависит от размера инициализированной части файла и времени отклика и емкости системы хранения.The duration of this process depends on size of file portion that is initialized and on the response time and capacity of the storage system. Если инициализация занимает много времени, могут отобразиться следующие сообщения, записанные в журнал ошибок SQL Server и в журнал приложения.If the initialization takes a long time, you may see the following messages recorded in the SQL Server Errorlog and the Application Log.

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.

Длительное автоматическое увеличение размера базы данных или файла журнала транзакций может привести к проблемам с производительностью запросов.A long autogrow of a database and/or transaction log file may cause query performance problems. Это обусловлено тем, что операция, требующая автоматического увеличения размера файла, будет приостановлена на ресурсах, таких как блокировки или кратковременные блокировки, по мере увеличения размера файла.This is because an operation that requires the autogrowth of a file will hold on to resources such as locks or latches during the duration of the file grow operation. Длительные ожидания кратковременных блокировок могут отображаться для страниц распределения.You may see long waits on latches for allocation pages. Для операции, требующей длительного автоматического увеличения размера, будет показан тип ожидания PREEMPTIVE_OS_WRITEFILEGATHER.The operation that requires the long autogrow will show a wait type of PREEMPTIVE_OS_WRITEFILEGATHER.

См. также:See Also

CREATE DATABASE (SQL Server Transact-SQL)CREATE DATABASE (SQL Server Transact-SQL)