Initialisation instantanée des fichiers de base de donnéesDatabase Instant File Initialization

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions)

Dans cet article, vous découvrirez l’initialisation instantanée de fichiers et comment l’activer pour accélérer la croissance de vos fichiers de base de données 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.

Par défaut, les fichiers de données et les fichiers journaux sont initialisés pour remplacer toutes les données existantes laissées sur le disque par des fichiers précédemment supprimés.By default, data and log files are initialized to overwrite any existing data left on the disk from previously deleted files. Les fichiers de données et les fichiers journaux sont d’abord initialisés en étant remplis avec des zéros quand vous effectuez les opérations suivantes :Data and log files are first initialized by zeroing the files (filling with zeros) when you perform the following operations:

  • Créer une base de données.Create a database.
  • Ajouter des fichiers journaux ou de données à une base de données existante.Add data or log files, to an existing database.
  • Augmenter la taille d'un fichier existant (opérations de croissance automatique incluses).Increase the size of an existing file (including autogrow operations).
  • Restaurer une base de données ou un groupe de fichiers.Restore a database or filegroup.

Dans SQL ServerSQL Server, l’initialisation instantanée des fichiers (IFI) permet une exécution plus rapide des opérations de fichier mentionnées précédemment, car elle libère de l’espace disque utilisé sans remplir cet espace avec des zéros.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. À la place, le contenu du disque est remplacé à mesure que de nouvelles données sont écrites dans les fichiers.Instead, disk content is overwritten as new data is written to the files. Les fichiers journaux ne peuvent pas être initialisés instantanément.Log files cannot be initialized instantaneously.

Activer l’initialisation instantanée de fichiersEnable instant file initialization

L’initialisation instantanée de fichiers est disponible seulement que si l’autorisation SE_MANAGE_VOLUME_NAME a été octroyée au compte de démarrage de service SQL ServerSQL Server.Instant file initialization is only available if the SQL ServerSQL Server service startup account has been granted SE_MANAGE_VOLUME_NAME. Les membres du groupe Administrateurs Windows disposent de ce droit et peuvent l’attribuer aux autres utilisateurs en les ajoutant à la stratégie de sécurité Effectuer les tâches de maintenance de volume .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.

Important

L’utilisation de certaines fonctionnalités, comme Transparent Data Encryption (TDE), peuvent empêcher l’initialisation instantanée de fichiers.Some feature usage, such as Transparent Data Encryption (TDE), can prevent Instant File Initialization.

Notes

À compter de SQL Server 2016 (13.x)SQL Server 2016 (13.x), vous pouvez accorder cette autorisation au compte de service au moment de l’installation.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.

Si vous effectuez l’installation depuis une invite de commandes, ajoutez l’argument /SQLSVCINSTANTFILEINIT ou cochez la case Accorder le privilège Effectuer une tâche de maintenance en volume au service Moteur de base de données SQL Server dans l’Assistant Installation.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.

Pour accorder l'autorisation Perform volume maintenance tasks à un compteTo grant an account the Perform volume maintenance tasks permission:

  1. Sur l’ordinateur où le fichier de données doit être créé, ouvrez l’application Stratégie de sécurité locale (secpol.msc).On the computer where the data file will be created, open the Local Security Policy application (secpol.msc).

  2. Dans le volet gauche, développez Stratégies locales, puis cliquez sur Attribution des droits utilisateur.In the left pane, expand Local Policies, and then click User Rights Assignment.

  3. Dans le volet droit, double-cliquez sur Effectuer des tâches de maintenance sur les volumes.In the right pane, double-click Perform volume maintenance tasks.

  4. Cliquez sur Ajouter un utilisateur ou un groupe et ajoutez le compte qui exécute le service SQL Server.Click Add User or Group and add the account that runs the SQL Server service.

  5. Cliquez sur Appliquer, puis fermez toutes les boîtes de dialogue Stratégie de sécurité locale .Click Apply, and then close all Local Security Policy dialog boxes.

  6. Redémarrez le service SQL Server.Restart the SQL Server service.

  7. Consultez le journal des erreurs SQL ServerSQL Server au démarrage.Check the SQL ServerSQL Server error log at startup.

    S’applique à : SQL ServerSQL Server (à compter de SQL Server 2012 (11.x)SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 et de SQL Server 2016 (13.x)SQL Server 2016 (13.x) et versions ultérieures).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. Si le compte de démarrage de service SQL ServerSQL Server dispose de l’autorisation SE_MANAGE_VOLUME_NAME, un message d’information similaire au suivant est journalisé :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. Si le compte de démarrage de service SQL ServerSQL Server n’a pas l’autorisation SE_MANAGE_VOLUME_NAME, un message d’information similaire au suivant est journalisé :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.

    Notes

    Vous pouvez utiliser la colonne instant_file_initialization_enabled dans la vue de gestion dynamique sys.dm_server_services pour déterminer si l’initialisation instantanée de fichiers est activée.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.

Considérations relatives à la sécuritéSecurity considerations

Nous vous recommandons d’activer l’initialisation instantanée de fichiers, car les avantages peuvent l’emporter sur le risque de sécurité.We recommend enabling instant file initialization as the benefits can outweigh the security risk.

Lors de l’utilisation de l’initialisation instantanée de fichiers, le contenu du disque supprimé n’est remplacé que lorsque de nouvelles données sont écrites dans les fichiers.When using instant file initialization, the deleted disk content is overwritten only as new data is written to the files. Pour cette raison, le contenu supprimé est éventuellement accessible à un principal non autorisé jusqu’à ce que d’autres données soient écrites sur cette zone spécifique du fichier de données.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.

Même si le fichier de base de données est attaché à l’instance de SQL ServerSQL Server, le risque de divulgation de ces informations est limité par la liste de contrôle d’accès discrétionnaire (DACL, Discretionary Access Control List) du fichier.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. Cette liste DACL n'autorise l'accès au fichier qu'à l'administrateur local et au compte de service SQL ServerSQL Server .This DACL allows file access only to the SQL ServerSQL Server service account and the local administrator. Cependant, quand le fichier est détaché, un utilisateur ou un service ne bénéficiant pas de l’autorisation SE_MANAGE_VOLUME_NAME peut y accéder.However, when the file is detached, it may be accessed by a user or service that does not have SE_MANAGE_VOLUME_NAME.

Des considérations similaires sont disponibles dans les cas suivants :Similar considerations exist when:

  • La base de données est sauvegardée.The database is backed up. Si le fichier de sauvegarde n’est pas protégé par une liste DACL appropriée, le contenu supprimé peut devenir inaccessible à un utilisateur ou service non autorisé.If the backup file is not protected with an appropriate DACL, the deleted content can become available to an unauthorized user or service.

  • Un fichier est développé à l’aide de l’IFI (initialisation instantanée de fichiers) .A file is grown using IFI. Un administrateur SQL Server peut potentiellement accéder au contenu de la page brute et voir le contenu précédemment supprimé.A SQL Server administrator could potentially access the raw page contents and see the previously deleted content.

  • Les fichiers de base de données sont hébergés sur un réseau de zone de stockage.The database files are hosted on a storage area network. Il est également possible que le réseau de zone de stockage présente toujours les nouvelles pages préinitialisées. Or, laisser le système d’exploitation réinitialiser les pages peut représenter une charge supplémentaire non nécessaire.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.

Si le risque de divulgation du contenu supprimé constitue un problème, effectuez l’une et/ou l’autre des actions suivantes :If the potential for disclosing deleted content is a concern, you should take one or both of the following actions:

  • Assurez-vous toujours que les fichiers de sauvegarde et les fichiers de données détachés possèdent des listes DACL restrictives.Always make sure that any detached data files and backup files have restrictive DACLs.

  • Désactivez l’initialisation de fichiers instantanée pour l’instance de SQL ServerSQL Server.Disable instant file initialization for the instance of SQL ServerSQL Server. Pour ce faire, révoquez SE_MANAGE_VOLUME_NAME du compte de démarrage du service SQL ServerSQL Server.To do so, revoke SE_MANAGE_VOLUME_NAME from the SQL ServerSQL Server service startup account.

    Notes

    La désactivation augmentera les durées d’allocation des fichiers de données et n'affecte que les fichiers créés ou dont la taille a augmenté après la révocation du droit de l'utilisateur.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.

Droit d’utilisateur SE_MANAGE_VOLUME_NAMESE_MANAGE_VOLUME_NAME user right

Le privilège utilisateur SE_MANAGE_VOLUME_NAME peut être attribué dans l’applet Outils d’administration Windows, Stratégie de sécurité locale.The SE_MANAGE_VOLUME_NAME user privilege can be assigned in Windows Administrative Tools, Local Security Policy applet. Sous Stratégies locales, sélectionnez Attribution des droits utilisateur et modifiez la propriété Effectuer des tâches de maintenance de volume.Under Local Policies select User Right Assignment and modify the Perform volume maintenance tasks property.

Considérations relatives aux performancesPerformance considerations

Le processus d’initialisation du fichier de base de données écrit des zéros dans les nouvelles régions du fichier sous l’initialisation.The Database File initialization process writes zeros to the new regions of the file under initialization. La durée de ce processus dépend de la taille de la partie de fichier initialisée et du temps de réponse et de la capacité du système de stockage.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. Si l’initialisation prend beaucoup de temps, les messages suivants enregistrés dans le journal des erreurs SQL Server et dans le journal des applications s’affichent.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.

Une longue croissance automatique d’une base de données et/ou d’un fichier journal des transactions peut entraîner des problèmes de performances des requêtes.A long autogrow of a database and/or transaction log file may cause query performance problems. Cela est dû au fait qu’une opération qui requiert la croissance automatique d’un fichier contiendra des ressources telles que des verrous ou des verrous internes pendant la durée de l’opération de croissance du fichier.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. Vous pouvez constater des attentes de longue durée sur les verrous pour les pages d’allocation.You may see long waits on latches for allocation pages. L’opération qui requiert la croissance automatique longue affichera un type d’attente de PREEMPTIVE_OS_WRITEFILEGATHER.The operation that requires the long autogrow will show a wait type of PREEMPTIVE_OS_WRITEFILEGATHER.

Voir aussiSee Also

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