Passer au contenu

Pourquoi mon instance de base de données Amazon RDS for Oracle utilise-t-elle plus d'espace de stockage que prévu ?

Lecture de 5 minute(s)
0

Je souhaite savoir pourquoi mon instance de base de données Amazon Relational Database Service (Amazon RDS) for MySQL utilise plus d'espace que prévu. Je souhaite également optimiser le stockage sur disque.

Résolution

Pour surveiller l'espace de stockage disponible pour une instance de base de données Amazon RDS, vous pouvez utiliser la métrique Amazon CloudWatch FreeStorageSpace. Cependant, la métrique FreeStorageSpace n'indique pas ce qui utilise le stockage dans l'instance de base de données. Pour déterminer l'utilisation de votre espace de stockage et récupérer de l'espace de stockage, appliquez les méthodes suivantes.

Exécuter OPTIMIZE TABLE

Les tableaux utilisent uniquement de l'espace qui n'est pas activement utilisé. Cependant, Amazon RDS alloue toujours de l'espace aux tables. Si vous avez activé innodb_file_per_table, vous pouvez exécuter la commande OPTIMIZE TABLE pour récupérer de l'espace. Pour plus d’informations, consultez la page Instruction OPTIMIZE TABLE sur le site Web de MySQL.

Vous pouvez utiliser OPTIMIZE TABLE pour les tables InnoDB, MyISAM et ARCHIVE. OPTIMIZE TABLE fonctionne lorsque vous créez la table dans un tablespace distinct conformément au paramètre de configuration par défaut innodb_file_per_table d'Amazon RDS. Pour plus d'informations, consultez la page Tablespaces fichier par table sur le site Web de MySQL.

Amazon RDS accepte la commande OPTIMIZE TABLE, mais exécute en fait la commande ALTER TABLE...FORCE à la place. Dans ce cas, vous recevez un message d'avertissement similaire au suivant :

« Table does not support optimize, doing recreate + analyze instead. » (La table ne prend pas en charge l'optimisation, mais plutôt recréer + analyser)

Mettez à jour vos statistiques, puis exécutez la requête information_schema.tables suivante pour évaluer l'utilisation du stockage sur la base des statistiques :

SELECT    table_name,
    data_length,
    max_data_length,
    index_length,
    data_free
FROM
    information_schema.tables
WHERE table_schema='schema_name'
;

Remarque : Dans la requête précédente, ajoutez les valeurs correspondant à votre cas d'utilisation.

La colonne data_free indique la quantité d'espace libre allouée à une table qui n'est pas activement utilisée.

Réduire le stockage des tables d'applications

Pour afficher la quantité de stockage utilisée par les tables d’applications sur votre instance de base de données RDS MySQL, exécutez la requête suivante :

SELECT TABLESPACE_NAME,
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,
 FREE_EXTENTS FREE_EXTENTS_MB, TOTAL_EXTENTS
TOTAL_EXTENTS_MB FROM
INFORMATION_SCHEMA.FILES;

Pour localiser la plus grande table d'applications sur votre instance de base de données RDS MySQL, exécutez la requête suivante :

SELECT TABLESPACE_NAME,  
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,  
FREE_EXTENTS FREE_EXTENTS_MB,
TOTAL_EXTENTS  TOTAL_EXTENTS_MB FROM  
INFORMATION_SCHEMA.FILES
ORDER BY TOTAL_EXTENTS_MB DESC;

Remarque : Si une base de données inclut des tables dont les colonnes de longueur variable sont supérieures à 768 octets, vous ne pouvez pas calculer le stockage individuel utilisé par la base de données et la table. Cette limitation inclut les commandes BLOB, TEXT, VARCHAR et VARBINARY.

Réduire le stockage des journaux binaires

Si vous ajoutez un réplica en lecture à une instance Amazon RDS, le journal binaire de l'instance source utilise un espace de stockage supplémentaire. Pour déterminer la quantité de stockage utilisée par le journal binaire de l'instance source, vérifiez la métrique CloudWatch BinLogDiskUsage. Si le journal binaire utilise de plus en plus de stockage, vous devrez peut-être synchroniser vos réplicas en lecture.

Réduire ou désactiver le stockage des journaux généraux et des journaux de requêtes lents

Lorsque vous désactivez les paramètres du journal général et du journal de requêtes lentes, votre instance commence à stocker les journaux et à les sauvegarder. Pour alterner les fichiers et contrôler l'utilisation du disque, consultez les sections mysql.rds_rotate_general_log et mysql.rds_rotate_slow_log.

Remarque : Lorsque vous n'êtes pas en train de résoudre les problèmes, il est recommandé de désactiver les journaux de requêtes généraux et lents.

Gérer ou réduire la taille de l'espace de table du système InnoDB

Le tablespace système commence par 10 Mo d'espace et contient le dictionnaire de données InnoDB et l'espace d'annulation. Une fois l'espace alloué, le fichier fait au moins 10 Mo et peut utiliser davantage de stockage disponible.

Par défaut, Amazon RDS définit innodb_file_per_table sur 1 afin que la base de données stocke les données de chaque tablespace dans son propre fichier .ibd. Pour récupérer de l'espace réutilisable pour les tables associées, utilisez OPTIMIZE TABLE pour redimensionner chaque fichier de tablespace logique. Ou, vous pouvez supprimer une table.

Si vous définissez innodb_file_per_table sur 0, Amazon RDS alloue toutes les tables au tablespace système. Si vous supprimez des tables ou des index, ou si vous supprimez ou tronquez des données des tables allouées dans le système, le tablespace marque l'espace comme réutilisable. Cependant, innodb_file_per_table ne libère pas d'espace pour le système de fichiers.

Vous ne pouvez pas réduire l'espace disque logique du système dans l'instance où il se trouve. Exportez plutôt les données de votre base de données actuelle, puis importez-les dans une nouvelle instance. Pour réduire les temps d'arrêt, configurez votre nouvelle instance MySQL en tant que réplica de l'instance Amazon RDS source. Après avoir synchronisé le réplica avec l'instance Amazon RDS source, passez à la nouvelle instance.

Remarque : Lorsque vous effectuez une restauration à partir d'un instantané ou que vous créez un réplica en lecture, vous ne récupérez pas d'espace dans le tablespace système. Les deux méthodes utilisent un instantané du volume de stockage de l'instance source qui contient le tablespace système.

Informations connexes

L’instance de base de données Amazon RDS manque d’espace de stockage

Modification d'une instance de base de données Amazon RDS

Comment résoudre l'erreur « MySQL HA_ERR_RECORD_FILE_FULL » lorsque j'utilise Amazon RDS for MySQL ?