Comment puis-je résoudre les problèmes de consommation de stockage dans mon instance de base de données RDS pour SQL Server ?

Dernière mise à jour :17-10-2022

Mon instance de base de données Amazon Relational Database Service (Amazon RDS) pour Microsoft SQL Server utilise un espace de stockage plus important que prévu. Quelle en est la raison et comment puis-je optimiser l'espace de stockage sur disque ?

Brève description

Vous pouvez surveiller l'espace de stockage disponible pour une instance de base de données en utilisant la métrique FreeStorageSpace dans Amazon CloudWatch. La surveillance fréquente de cette métrique et l'activation de la mise à l'échelle automatique du stockage permettent d'éviter que les instances ne soient à court de stockage (état Storage Full).

Toutefois, cette métrique FreeStorageSpace ne décrit pas comment le moteur SQL Server utilise le stockage disponible.

Solution

Amazon RDS pour les instances SQL Server dans l'état Storage Full

Vous ne pouvez pas effectuer d'opérations de base lorsque votre instance RDS est bloquée à l'état Storage Full. Pour en savoir plus, consultez Comment procéder si mes instances de base de données Amazon RDS sont à court d'espace de stockage ?

Certaines instances de base de données RDS pour SQL Server sont limitées en matière de modification du stockage. Dans la console Amazon RDS, l'option Allocated storage (Stockage alloué) est désactivée si votre instance de bases de données n'est pas éligible à la modification. Pour dimensionner le stockage sur une instance lorsque l'option de modification n'est pas disponible, migrez vos données à l'aide de la sauvegarde native et restaurez-les vers une nouvelle instance. Assurez-vous que la nouvelle instance possède des IOPS provisionnées ou possède le type de stockage à usage général (SSD). Vous pouvez également utiliser un outil de migration de données pour migrer vers la nouvelle instance. Pour plus d'informations, consultez Modification d'une instance de base de données Amazon RDS.

Utilisez la commande suivante de l'Interface de la ligne de commande AWS (AWS CLI) pour renvoyer les options de stockage valides pour votre instance de base de données :

describe-valid-db-instance-modifications

Remarque : Le stockage scalaire et la mise à l'échelle automatique du stockage ne sont pas pris en charge dans RDS pour les instances SQL Server qui utilisent le stockage.

Pour les instances où la mise à l'échelle automatique du stockage est activée, le stockage n'est étendu que dans certains scénarios. Pour plus d’information, consultez Gestion automatique de la capacité avec la mise à l’échelle automatique du stockage Amazon RDS. En outre, le stockage n'est étendu que si le seuil de stockage maximal n'est pas égal ou supérieur à l'incrément de stockage. Pour plus d'informations, consultez la section Limitations.

Consommation de stockage pour les instances RDS pour SQL Server

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. Pour cela, exécutez 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'allocation excessive d'espace libre pour les journaux de transactions en utilisant les options de fichier et de groupe de fichiers ALTER DATABASE (Transact-SQL). Les options configurent les paramètres de croissance automatique de 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 la taille d'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.

Les instances de base de données dont l'état de stockage est complet peuvent ne pas être en mesure de redémarrer. Si cela se produit, augmentez le stockage alloué à votre instance de base de données, puis redémarrez. 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 la section Définition de la période de rétention des fichiers de suivi 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, exécutez une commande afin de répertorier les fichiers présents sur votre instance de base de données. Pour plus d'informations, consultez Répertorier les fichiers présents sur l'instance de bases de données RDS.

CDC

Pour les bases de données sur lesquelles le CDC est activé, la taille du fichier journal augmente en fonction de la fréquence des modifications apportées aux tables ou bases de données sources. L'espace de stockage peut éventuellement s'épuiser. Si le disque journal est plein, le CDC ne peut pas traiter d'autres transactions.

Audit

Si l'audit n'est pas configuré correctement, par exemple, les journaux peuvent augmenter de façon exponentielle et affecter le stockage. Pour plus d'informations, consultez la section Utilisation de SQL Server Audit.

Le mode d'audit C2 enregistre une grande quantité d'informations sur les événements dans le fichier journal. Le fichier journal peut augmenter rapidement et placer l'instance dans l'état Storage Full. Pour plus d'informations, consultez l'option de configuration du serveur en mode audit C2 dans la documentation Microsoft.

En outre, l'activation de fonctionnalités telles que la banque de requêtes peut également avoir un impact sur l'utilisation des ressources.