Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Dans cet article, vous allez découvrir l’initialisation instantanée des 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 des fichiers permet d’accélérer l’exécution des opérations sur les fichiers mentionnées précédemment, car elle récupère l’espace disque utilisé sans le remplir de zéros. Au lieu de cela, l’ancien contenu du disque est remplacé lorsque de nouvelles données sont écrites dans les fichiers.
Dans Azure SQL Database et Azure SQL Managed Instance, l’initialisation instantanée des fichiers est disponible uniquement pour les fichiers journaux de transactions.
Initialisation instantanée des fichiers et journal des transactions
S’applique à : SQL Server 2022 (16.x) et versions ultérieures, ainsi qu’à Azure SQL Database et Azure SQL Managed Instance.
Auparavant, les fichiers journaux de transactions ne pouvaient pas être initialisés instantanément. Toutefois, à partir de SQL Server 2022 (16.x) (toutes éditions) et dans Azure SQL Database et Azure SQL Managed Instance, les événements d’augmentation automatique du journal des transactions jusqu’à 64 Mo peuvent bénéficier de l’initialisation instantanée des fichiers. L’incrément de taille de croissance automatique par défaut pour les nouvelles bases de données est de 64 Mo. Les événements d’augmentation automatique du fichier journal des transactions supérieurs à 64 Mo ne peuvent pas bénéficier de l’initialisation instantanée des fichiers.
Contrairement à l’initialisation instantanée des fichiers de données, qui est empêchée si le chiffrement transparent des données (TDE) est activé, l’initialisation instantanée des fichiers est autorisée pour la croissance du journal des transactions sur les bases de données avec TDE activées, en raison de la croissance du fichier journal des transactions et du fait que le journal des transactions est écrit de manière série.
L’initialisation instantanée des 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 des transactions.
L’initialisation instantanée des 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 des fichiers de données est disponible uniquement si le compte de service ou le SID de service du service moteur de base de données reçoit le SE_MANAGE_VOLUME_NAME privilège. Les membres du groupe Administrateurs Windows ont ce droit et peuvent l’accorder à d’autres utilisateurs en les ajoutant à la stratégie de sécurité des tâches de maintenance en volume . Le privilège SE_MANAGE_VOLUME_NAME n’est pas requis pour l’initialisation instantanée des fichiers pour les événements d’augmentation jusqu’à 64 Mo dans le journal des transactions, qui a été introduite avec la version de SQL Server 2022 (16.x).
Nous vous recommandons d’accorder le privilège SE_MANAGE_VOLUME_NAME au SID du service Moteur de base de données. Cela garantit que l’octroi reste même si vous modifiez le compte de service du service moteur de base de données. Pour plus d’informations, consultez Utilisation des SID de service pour accorder des autorisations aux services dans SQL Server.
Importante
Certaines fonctionnalités, telles que le chiffrement transparent des données (TDE), peuvent empêcher l’initialisation instantanée des fichiers (IFI). Dans SQL Server 2022 (16.x) et versions ultérieures, et sur Azure SQL Database et Azure SQL Managed Instance, IFI est autorisé dans le journal des transactions. Pour plus d’informations, consultez Initialisation instantanée des fichiers et le journal des transactions.
Dans SQL Server 2016 (13.x) et versions ultérieures, cette autorisation peut être accordée à l’identificateur de sécurité du service du moteur de base de données (SID) au moment de l’installation, pendant l’installation.
Si vous utilisez l’installation à partir de l’invite de commandes, ajoutez l’argument /SQLSVCINSTANTFILEINIT ou cochez la case Accorder le privilège Exécuter la tâche de maintenance du volume au service Moteur de base de données SQL Server dans l’assistant d’installation.
Pour attribuer une stratégie de sécurité Perform volume maintenance tasks à un compte ou un SID de service :
Sur l’ordinateur sur lequel les fichiers de données seront créés, ouvrez l’application Stratégie de sécurité locale (
secpol.msc).Dans le volet gauche, développez Stratégies locales, puis sélectionnez Attribution des droits utilisateur.
Dans le volet droit, double-cliquez sur Effectuer des tâches de maintenance sur les volumes.
Sélectionnez Ajouter un utilisateur ou un groupe et ajoutez le compte de service du moteur de base de données ou son SID de service.
Sélectionnez Appliquer, puis fermez toutes les boîtes de dialogue Stratégie de sécurité locale.
Redémarrez le service de moteur de base de données.
Vérifiez le journal des erreurs du moteur de base de données au démarrage.
S’applique à : SQL Server (à partir de SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 et SQL Server 2016 (13.x) et versions ultérieures).
Si le compte de service du moteur de base de données ou son SID de service reçoit le
SE_MANAGE_VOLUME_NAMEprivilège, un message d’information semblable à 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.Si le compte de service du moteur de base de données ou son SID de service n’a pas reçu le
SE_MANAGE_VOLUME_NAMEprivilège, un message d’information semblable à 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.
Note
Dans SQL Server, utilisez la valeur
instant_file_initialization_enableddans la vue de gestion dynamique sys.dm_server_services pour déterminer si l’initialisation instantanée des fichiers est activée pour votre instance.
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é.
Lorsque vous utilisez l’initialisation instantanée des fichiers, le contenu supprimé du disque n’est écrasé que lorsque de nouvelles données sont écrites dans les fichiers. Pour cette raison, le contenu supprimé est potentiellement accessible par un sujet non autorisé, jusqu’à ce que d’autres données soient écrites dans 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. Le DACL permet l’accès aux fichiers uniquement au compte de service de SQL Server, à son SID de service et à l’administrateur local. Toutefois, lorsque le fichier est détaché, il est potentiellement accessible par un utilisateur ou un service qui n’a pas le SE_MANAGE_VOLUME_NAME privilège.
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 un service non autorisé.
Un fichier est développé à l’aide de l’IFI. 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 la base de données sont hébergés sur un réseau de stockage. Il est également possible que le réseau de stockage présente toujours les nouvelles pages comme préinitialisées, et le fait de demander au système d’exploitation de réinitialiser les pages peut entraîner une surcharge inutile.
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 l’instance de SQL Server. Pour ce faire, révoquez
SE_MANAGE_VOLUME_NAMEdu compte de service du moteur de base de données et de son SID de service.Note
La désactivation de l’IFI augmente le temps de croissance des fichiers de données et affecte uniquement les fichiers créés ou augmentés de taille une fois le privilège révoqué.
Privilège SE_MANAGE_VOLUME_NAME
Le SE_MANAGE_VOLUME_NAME privilège peut être affecté dans les outils d’administration Windows, l’applet de 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 initialisation. La durée de ce processus dépend de la taille de la partie du fichier qui est initialisée, ainsi que du temps de réponse et de la capacité du système de stockage. Si l’initialisation prend beaucoup de temps, les messages suivants peuvent s’afficher 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 extension automatique prolongée 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. Une opération qui nécessite l’extension automatique d’un fichier conserve des ressources telles que des verrous ou des loquets pendant toute la durée de l’opération d’extension du fichier. Vous pouvez constater de longues attentes sur les loquets pour l’allocation des pages. L’opération qui nécessite une extension automatique prolongée affiche un type d’attente de PREEMPTIVE_OS_WRITEFILEGATHER.