Comment résoudre les problèmes liés à l'utilisation de l'espace de stockage dans mon instance de base de données Amazon RDS qui exécute SQL Server ?

Dernière mise à jour : 22/09/2020

Mon instance de base de données Amazon Relational Database Service (Amazon RDS) qui exécute SQL Server utilise un espace de stockage plus grand que prévu. Quelle en est la raison et comment optimiser l'espace de stockage sur disque ?

Solution

Vous pouvez utiliser la métrique FreeStorageSpace de Amazon CloudWatch pour surveiller l'espace de stockage disponible pour une instance de base de données RDS. Toutefois, cette métrique ne décrit pas comment le moteur SQL Server utilise le stockage disponible.

Exécutez une requête similaire à la suivante pour collecter des informations détaillées sur l'utilisation de l'espace disque physique pour une instance de base de données SQL Server :

SELECT D.name AS [database_name]
    , F.name AS [file_name]
    , F.type_desc AS [file_type]
    , CONVERT(decimal(10,2), F.size * 0.0078125) AS [size_on_disk_mb]
    , CONVERT(decimal(10,2), F.max_size * 0.0078125) AS [max_size_mb]
FROM sys.master_files AS F
INNER JOIN sys.databases AS D
    ON F.database_id = D.database_id;

Les fichiers contenant ROWS comprennent des données tandis que les fichiers contenant LOGS représentent des transactions en cours.

Remarque : la vue système sys.master_files affiche la taille de démarrage de la base de donnée temporaire. Elle n’indique pas la taille actuelle de la base de données temporaire. Exécutez la requête suivante pour vérifier la taille actuelle de la base de données temporaire :

select name AS [database_name], 
physical_name AS [file_name], 
convert(decimal(10,2),size*0.0078125) AS [size_on_disk_mb]
from tempdb.sys.database_files;

Assurez-vous que vous comprenez comment le moteur SQL Server utilise le stockage avant d'optimiser le stockage. En général, le stockage du moteur SQL Server est défini à l'aide des catégories suivantes :

Fichiers de base de données

Vous pouvez diviser l'espace de stockage total utilisé par une base de données individuelle en lignes, en index et en espaces libres dans la base de données actuellement active en exécutant une requête similaire à la suivante :

EXEC sp_spaceused;

Fichiers journaux de transactions

Exécutez la requête suivante pour déterminer le volume d'espace de stockage utilisé par les journaux de transactions :

DBCC SQLPERF(LOGSPACE)

La présence d'espace libre dans les journaux de transactions est normale. Pour retirer l'excédant d'espace libre, référez-vous à la documentation Microsoft pour DBCC SHRINKFILE.

Vous pouvez réduire l'excédent d'espace libre dans les journaux de transactions en utilisant les options de fichier et de groupe de fichiers ALTER DATABASE (Transact-SQL) pour configurer les paramètres de croissance automatique pour la base de données.

Base de données temporaire (tempdb)

La base de données temporaire SQL Server se constitue automatiquement. Si la base de données temporaire utilise une grande partie de l'espace de stockage disponible, vous pouvez réduire sa taille.

Remarque : si vous réduisez une base de données temporaire, recherchez les messages d'erreur dans l'onglet Message de SQL Server Management Studio (SSMS) après l'exécution de la commande. Si vous recevez un message d'erreur « DBCC SHRINKFILE: Page could not be moved because it is a work table page » (DBCC SHRINKFILE: impossible de déplacer la page car il s'agit d'une page de table de travail), consultez la documentation de Microsoft pour DBCC FREESYSTEMCACHE et DBCC FREEPROCCACHE. Vous pouvez également redémarrer l'instance de base de données pour effacer la base de données temporaire.

Si votre instance de base de données a l'état Stockage complet et que le redémarrage n'est pas possible, vous pouvez augmenter le stockage alloué pour votre instance de base de données, puis redémarrer. Pour en savoir plus, consultez Comment procéder si mes instances de base de données Amazon RDS sont à court d'espace de stockage ?

Index de base de données

Si vous dédiez une partie importante de votre espace de stockage disponible aux index, vous pouvez peut-être économiser de l'espace grâce au réglage d'index. Vous pouvez collecter des informations détaillées sur l'utilisation de l'index en exécutant la vue de gestion dynamique sys.dm_db_index_usage_stats. Cela peut vous aider à déterminer les priorités de réglage.

Fichiers de trace

Les fichiers de trace, y compris les fichiers de trace d'audit C2 et les fichiers de vidage, peuvent occuper beaucoup d'espace disque. Amazon RDS supprime automatiquement les fichiers de trace et de vidage datant de plus de 7 jours, mais vous pouvez également ajuster les paramètres de rétention de vos fichiers de trace. Pour plus d'informations, consultez Utilisation des fichiers de trace et de vidage.

Espace occupé par l'intégration Amazon S3

Si vous avez intégré votre instance de base de données RDS avec Amazon S3, vous avez peut-être téléchargé des fichiers sur votre lecteur D: qui occupent de l'espace. Pour vérifier la quantité d'espace occupé par votre intégration S3, vous pouvez exécuter une commande afin de répertorier les fichiers sur votre instance de base de données. Pour plus d'informations, consultez Intégration d'une instance Amazon RDS for SQL Server avec Amazon S3.