Initialisation instantanée des fichiers de base de données

S’applique à :SQL Server

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.

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. 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 :

  • Créer une base de données.
  • Ajouter des fichiers journaux ou de données à une base de données existante.
  • Augmenter la taille d'un fichier existant (opérations de croissance automatique incluses).
  • Restaurer une base de données ou un groupe de fichiers.

Dans SQL Server, pour les fichiers de données uniquement, 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 récupère l’espace disque utilisé sans remplir cet espace avec des zéros. À la place, le contenu du disque est remplacé à mesure que de nouvelles données sont écrites dans les fichiers.

Les fichiers journaux des transactions ne peuvent pas être initialisés instantanément. Toutefois, à compter de SQL Server 2022 (16.x), l’initialisation instantanée des fichiers peut bénéficier aux événements de croissance automatique du journal des transactions jusqu’à 64 Mo. L’incrément par défaut de la taille de croissance automatique pour les nouvelles bases de données est de 64 Mo. Les événements de croissance automatique des fichiers journaux des transactions qui sont supérieurs à 64 Mo ne peuvent pas bénéficier de l’initialisation instantanée des fichiers.

Activer l’initialisation instantanée de fichiers

L’initialisation instantanée du fichier n’est disponible que si le compte de démarrage du service SQL Server a été accordé 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 .

Important

L’utilisation de certaines fonctionnalités, comme Transparent Data Encryption (TDE), peuvent empêcher l’initialisation instantanée de fichiers.

Notes

À compter de SQL Server 2016 (13.x), cette autorisation peut être accordée au compte de service au moment de l’installation, pendant l’installation.

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.

Pour accorder l'autorisation Perform volume maintenance tasks à un compte

  1. Sur l’ordinateur où le fichier de données doit être créé, ouvrez l’application Stratégie de sécurité locale (secpol.msc).

  2. Dans le volet gauche, développez Stratégies locales, puis cliquez sur Attribution des droits utilisateur.

  3. Dans le volet droit, double-cliquez sur Effectuer des tâches de maintenance sur les volumes.

  4. Cliquez sur Ajouter un utilisateur ou un groupe et ajoutez le compte qui exécute le service SQL Server.

  5. Cliquez sur Appliquer, puis fermez toutes les boîtes de dialogue Stratégie de sécurité locale .

  6. Redémarrez le service SQL Server.

  7. Vérifiez le journal des erreurs SQL Server au démarrage.

    S’applique à : SQL Server (à compter de SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 et SQL Server 2016 (13.x) et versions ultérieures).

    1. Si le compte de démarrage du service SQL Server est accordé SE_MANAGE_VOLUME_NAME, un message d’information semblable à ce qui suit est consigné :

      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 du service SQL Server n’a pas été accordé SE_MANAGE_VOLUME_NAME, un message d’information semblable à ce qui suit est enregistré :

      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.

Considérations relatives à la sécurité

Nous vous recommandons d’activer l’initialisation instantanée de fichiers, car les avantages peuvent l’emporter sur le risque de sécurité.

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. 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.

Même si le fichier de base de données est attaché à l’instance de SQL 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. Cette liste DACL n’autorise l’accès au fichier qu’à l’administrateur local et au compte de service SQL Server. 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.

Des considérations similaires sont disponibles dans les cas suivants :

  • La base de données est sauvegardée. 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é.

  • Un fichier est développé à l’aide de l’IFI (initialisation instantanée de fichiers) . Un administrateur SQL Server peut potentiellement accéder au contenu de la page brute et voir le contenu précédemment supprimé.

  • Les fichiers de base de données sont hébergés sur un réseau de zone de stockage. 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.

Si le risque de divulgation du contenu supprimé constitue un problème, effectuez l’une et/ou l’autre des actions suivantes :

  • Assurez-vous toujours que les fichiers de sauvegarde et les fichiers de données détachés possèdent des listes DACL restrictives.

  • Désactivez l’initialisation instantanée des fichiers pour le instance de SQL Server. Pour ce faire, révoquez SE_MANAGE_VOLUME_NAME du compte de démarrage du service SQL Server.

    Notes

    La désactivation augmente le temps d’allocation des fichiers de données et affecte uniquement les fichiers qui sont créés ou augmentés en taille après la révocation du droit d’utilisateur.

Droit d’utilisateur SE_MANAGE_VOLUME_NAME

Le privilège utilisateur SE_MANAGE_VOLUME_NAME peut être attribué dans l’applet Outils d’administration Windows, Stratégie de sécurité locale. Sous Stratégies locales, sélectionnez Attribution des droits utilisateur et modifiez la propriété Effectuer des tâches de maintenance de volume.

Considérations relatives aux performances

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. 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. 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.

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. 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. Vous pouvez constater des attentes de longue durée sur les verrous pour les pages d’allocation. L’opération qui nécessite la croissance automatique longue affiche un type d’attente de PREEMPTIVE_OS_WRITEFILEGATHER.

Voir aussi

CREATE DATABASE (SQL Server Transact-SQL)