Réduire une base de données

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

Cet article explique comment réduire une base de données dans SQL Server en utilisant l’Explorateur d’objets dans SQL Server Management Studio ou Transact-SQL.

La réduction des fichiers de données permet de récupérer de l'espace en déplaçant des pages de données de la fin du fichier vers un espace inoccupé plus proche de l'avant du fichier. Quand une quantité d'espace libre suffisante est créée à la fin du fichier, des pages de données à la fin du fichier peuvent être désallouées et retournées au système de fichiers.

Limitations et restrictions

  • La base de données ne peut pas être réduite à la taille minimale de la base de données. La taille minimale d’une base de données correspond à la taille spécifiée lors de sa création ou lors de la dernière définition de taille explicite lors d’une opération de modification de taille de fichier, comme DBCC SHRINKFILE. Par exemple, la plus petite taille que pourrait avoir une base de données de 10 Mo initialement et de 100 Mo avant réduction, même si toutes les données qu'elle contient ont été supprimées, est de 10 Mo après réduction.

  • Vous ne pouvez pas réduire la taille d’une base de données en cours de sauvegarde. Inversement, vous ne pouvez pas sauvegarder une base de données alors qu’elle fait l’objet d’une opération de réduction.

Recommandations

  • Pour visualiser la quantité d'espace actuellement libre (non allouée) dans la base de données. Pour plus d'informations, consultez Afficher les informations sur l'espace occupé par les données et par le journal d'une base de données

  • Prenez en compte les informations suivantes lorsque vous envisagez de réduire une base de données :

    • Une opération de réduction est plus efficace après une opération qui crée une grande quantité d’espace de stockage inutilisé, par exemple une instruction DELETE ou une opération TRUNCATE TABLE ou DROP TABLE.

    • Un certain espace libre doit exister pour les opérations quotidiennes courantes pour la plupart des bases de données. Si vous réduisez plusieurs fois la taille d’une base de données et que vous constatez que la taille augmente de nouveau, cela indique que l’espace disponible est nécessaire pour les opérations courantes. Dans ce cas, la réduction de la taille de la base de données ne sert à rien. Les événements de croissance automatique nécessaires pour augmenter la taille des fichiers de base de données entravent les performances.

    • Une opération de réduction ne conserve pas l'état de fragmentation des index de la base de données ; en général, elle augmente la fragmentation dans une certaine mesure. Il s'agit là d'une raison supplémentaire pour ne pas réduire la taille de la base de données de manière répétitive.

    • Sauf en cas de besoin précis, n’attribuez pas la valeur ON à l’option de base de données AUTO_SHRINK.

Autorisations

Nécessite l’appartenance au rôle de serveur fixe sysadmin ou au rôle de base de données fixe db_owner .

Notes

Les opérations de réduction en cours peuvent bloquer d’autres requêtes sur la base de données et être bloquées par des requêtes déjà en cours. Introduites dans SQL Server 2022 (16.x), les opérations de base de données de réduction ont une option WAIT_AT_LOW_PRIORITY. Cette fonctionnalité est une nouvelle option supplémentaire pour DBCC SHRINKDATABASE et DBCC SHRINKFILE. Si une nouvelle opération de réduction en mode WAIT_AT_LOW_PRIORITY ne peut pas obtenir les verrous nécessaires en raison d’une requête de longue durée déjà en cours, l’opération de réduction expirera finalement après une minute et se ferme en mode silencieux, empêchant les autres requêtes d’être bloquées. Pour plus d’informations, consultez DBCC SHRINKDATABASE.

Pour plus d’informations sur la gestion des fichiers et les opérations de réduction spécifiques à Azure SQL Database, consultez Gérer l’espace de fichiers pour les bases de données dans Azure SQL Database.

Utiliser SQL Server Management Studio

S’applique à : SQL Server, Azure SQL Managed Instance

Réduire une base de données

  1. Dans l’Explorateur d'objets , connectez-vous à une instance du Moteur de base de données SQL Serveret développez-la.

  2. Développez Bases de données, puis cliquez avec le bouton droit sur la base de données à réduire.

  3. Pointez sur Tâches, puis sur Réduire, puis sélectionnez Base de données.

    • Sauvegarde de la base de données

      Affiche le nom de la base de données des sélectionnée.

    • Espace actuellement alloué

      Affiche l'espace total, utilisé et non utilisé, pour la base de données sélectionnée.

    • Espace libre disponible

      Affiche la totalité de l'espace disponible dans les fichiers de données et les fichiers journaux de la base de données sélectionnée.

    • Réorganiser les fichiers avant de libérer de l'espace inutilisé

      Activer cette option équivaut à exécuter DBCC SHRINKDATABASE en spécifiant une option de pourcentage cible. Désactiver cette option équivaut à exécuter DBCC SHRINKDATABASE avec l'option TRUNCATEONLY. Par défaut, cette option n’est pas sélectionnée lorsque la boîte de dialogue est ouverte. Si cette option est sélectionnée, l'utilisateur doit spécifier une option de pourcentage cible.

    • Espace libre maximal dans les fichiers après réduction

      Entrez le pourcentage maximal d'espace disponible à conserver dans les fichiers de base de données après la réduction de la base de données. Les valeurs autorisées sont comprises entre 0 et 99.

  4. Cliquez sur OK.

Utiliser Transact-SQL

Réduire une base de données

  1. Connectez-vous au Moteur de base de données.

  2. Dans la barre d’outils standard, sélectionnez Nouvelle requête.

  3. Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple suivant utilise DBCC SHRINKDATABASE pour diminuer la taille des fichiers de données et de journaux de la base de données UserDB, et pour obtenir 10 % d’espace libre dans la base de données.

DBCC SHRINKDATABASE (UserDB, 10);
GO

Après avoir réduit une base de données

Les données qui sont déplacées pour réduire un fichier peuvent être dispersées à n'importe quel emplacement disponible dans le fichier. Cela provoque la fragmentation de l'index et peut ralentir les performances des requêtes qui recherchent une plage de l'index. Pour éliminer la fragmentation, reconstruisez les index dans le fichier après réduction. Pour plus d’informations, consultez Régénérer un index.