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

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Dans cet article, vous découvrirez l'initialisation instantanée de fichiers (IFI) 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, l'initialisation instantanée de fichiers d'accélérer les opérations sur les fichiers mentionnées précédemment, car elle libère de 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.

Dans Azure SQL Database et Azure SQL Managed Instance, l'initialisation de fichiers instantanés n'est disponible que pour les fichiers journaux de transactions.

Initialisation instantanée de fichiers et journal des transactions

S'applique à : SQL Server 2022 (16.x) et versions ultérieures, Azure SQL Database et Azure SQL Managed Instance.

Historiquement, les fichiers journaux de transactions ne pouvaient pas être initialisés instantanément. À compter de SQL Server 2022 (16.x) (toutes les éditions) et dans Azure SQL Database, les événements de croissance automatique du journal des transactions dont la taille ne dépasse pas 64 Mo peuvent bénéficier d'une initialisation instantanée de fichiers. 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 du fichier journal de transactions d'une taille supérieure à 64 Mo ne peuvent pas bénéficier de l'initialisation instantanée de fichier.

L'initialisation instantanée du fichier est autorisée pour la croissance du journal des transactions sur les bases de données pour lesquelles le chiffrement transparent des données (TDE) est activé, en raison de la nature de l'expansion du fichier journal de transactions et du fait que le journal des transactions est écrit en série.

  • L'initialisation instantanée de fichiers est utilisée pour les niveaux Usage général et Critique pour l'entreprise d'Azure SQL Database et Azure SQL Managed Instance uniquement pour bénéficier de la croissance des fichiers journaux de transactions.
  • L'initialisation instantanée de fichiers n'est pas configurable dans Azure SQL Database et Azure SQL Managed Instance.

Activer l’initialisation instantanée de fichiers

L'initialisation instantanée de fichiers de données n'est disponible que si SE_MANAGE_VOLUME_NAME est octroyé au compte de démarrage du service SQL Server. 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 . L'octroi de SE_MANAGE_VOLUME_NAME n'est pas requis pour l'initialisation instantanée de fichiers d'événements de croissance dont la taille ne dépasse pas 64 Mo dans le journal des transactions, qui a été introduit avec la version de SQL Server 2022 (16.x).

Important

L'utilisation de certaines fonctionnalités, comme Transparent Data Encryption (TDE), peut empêcher l'initialisation instantanée de fichiers. À compter de SQL Server 2022 (16.x) et sur Azure SQL Database et Azure SQL Managed Instance, l'IFI est autorisée dans le journal des transactions. Pour plus d'informations, consultez Initialisation des fichiers instantanés et le journal des transactions.

Remarque

À compter de SQL Server 2016 (13.x), cette autorisation peut être octroyée au compte de service à l'installation, lors de la phase de configuration.

Si vous effectuez l'installation depuis l'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 de 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 sélectionnez Attribution des droits de l'utilisateur.

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

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

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

  6. Redémarrez le service SQL Server.

  7. Consultez 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 dispose de l'autorisation SE_MANAGE_VOLUME_NAME, un message d'information similaire à l'exemple suivant est journalisé :

      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 l'autorisation SE_MANAGE_VOLUME_NAME, un message d'information similaire à l'exemple suivant est journalisé :

      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.

    Remarque

    Dans SQL Server, utilisez la valeur de instant_file_initialization_enabled dans la vue de gestion dynamique sys.dm_server_services pour identifier si l'initialisation instantanée de fichiers est activée pour votre instance.

Considérations de 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é.

Lorsque vous utilisez 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, lorsque le fichier est détaché, un utilisateur ou un service peut y accéder même si l'autorisation SE_MANAGE_VOLUME_NAME ne lui est pas octroyée.

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 accessible à 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 comme étant 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 de fichiers pour l'instance de SQL Server. Pour ce faire, révoquez SE_MANAGE_VOLUME_NAME du compte de démarrage du service SQL Server.

    Remarque

    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.

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, il est possible que les messages suivants soient enregistrés dans le journal des erreurs SQL Server et dans le journal des applications.

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 croissance automatique trop longue 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 pendant la durée de l'opération de croissance du fichier. De longues attentes peuvent être observées au niveau des verrous pour les pages d'allocation. L'opération qui requiert la croissance automatique trop longue affichera un type d'attente de PREEMPTIVE_OS_WRITEFILEGATHER.