Passer au contenu

Comment résoudre les problèmes de table temporaire et de stockage plein dans Amazon RDS et Aurora édition compatible avec MySQL ?

Lecture de 4 minute(s)
0

Je rencontre des problèmes de table temporaire et de stockage plein lorsque j'exécute des requêtes dans une base de données Amazon Relational Database Service ou Amazon Aurora édition compatible avec MySQL.

Brève description

Lorsque vous exécutez des requêtes dans Amazon RDS ou Aurora compatible avec MySQL, le message d'erreur suivant peut s'afficher :

« The table '/rdsdbdata/tmp/#sqlxx_###' is full »

Le message d'erreur précédent s'affiche lorsque vous avez utilisé tout le stockage de table temporaire sur votre instance Amazon RDS ou Aurora compatible avec MySQL. Un message d'erreur s'affiche également lorsque vous exécutez des requêtes qui génèrent des tables temporaires volumineuses dépassant les quotas de stockage configurés.

Résolution

Résoudre des tables temporaires pleines

MySQL 8.0 et Aurora compatible avec MySQL 3.x utilisent un moteur de stockage TempTable pour les requêtes complexes qui nécessitent le stockage de résultats intermédiaires.

Le moteur de stockage TempTable crée des tables temporaires en mémoire, jusqu'à la taille par défaut du paramètre temptable_max_ram. Lorsque vous dépassez le quota, les tables temporaires utilisent des fichiers mappés en mémoire pour dépassement de capacité vers le stockage sur disque, jusqu'à la taille par défaut du paramètre temptable_max_mmap.

Si les données temporaires générées par les requêtes dépassent la taille par défaut pour le paramètre temptable_max_mmap, l'erreur « Table is full » peut s'afficher.

Pour résoudre ce problème, procédez comme suit :

  • Augmentez les paramètres temptable_max_ram et temptable_max_mmap afin de libérer de la mémoire et de l'espace disque pour les tables temporaires. Pour plus d'informations, consultez les pages temptable_max_ram et temptable_max_mmap sur le site Web de MySQL.
    Remarque : Le paramètre temptable_max_mmap ne doit pas dépasser 80 % de la taille de stockage locale sur l'instance Aurora.
  • Définissez le paramètre internal_tmp_mem_storage_engine sur MÉMOIRE pour éviter le quota de disque temptable_max_mmap. Définissez également les paramètres tmp_table_size et max_heap_table_size pour limiter la taille des tables temporaires internes individuelles. Pour plus d'informations, consultez les pages internal_temp_mem_storage_engine, tmp_table_size et max_heap_table_size sur le site Web de MySQL.
    Remarque : Le paramètre MÉMOIRE s'applique uniquement à l'instance Aurora Writer. Sur les instances de lecture, Aurora MySQL utilise le moteur de stockage TempTable.
  • Activez les paramètres aurora_tmptable_enable_per_table_limit et tune tmp_table_size pour limiter la mémoire maximale pour chaque table temporaire interne.
  • Utilisez la métrique FreeLocalStorage Amazon CloudWatch pour surveiller l'espace de stockage local associé à l'instance de base de données Aurora. Pour surveiller l'espace de stockage de données disponible associé à l'instance MySQL RDS, utilisez la métrique CloudWatch FreeStorageSpace.

Optimiser les requêtes pour réduire le nombre de tables temporaires

Certaines requêtes peuvent générer des tables temporaires volumineuses susceptibles de provoquer des erreurs.

Pour optimiser les requêtes, effectuez les actions suivantes :

  • Utilisez des index appropriés, en particulier pour les requêtes qui impliquent GROUP BY, ORDER BY, des sous-requêtes et des vues sur des tables partitionnées.
  • Utilisez l'élagage de partitions pour les requêtes sur des tables partitionnées afin de ne pas analyser la table entière.
  • Utilisez des index pour les requêtes qui effectuent des triages de fichiers afin de générer des tables temporaires implicites. Vous pouvez également ajuster le paramètre sort_buffer_size.

Résoudre les autres causes de problèmes de stockage plein

Les problèmes suivants peuvent également entraîner des problèmes de stockage plein dans les instances Amazon RDS et Aurora compatibles avec MySQL :

  • Base de données ou tables de grande taille dépassant la capacité de stockage locale.
  • Utilisation de l'espace disque local par les journaux d'audit, les journaux de requêtes lents ou les journaux de requêtes généraux.

Pour résoudre ces erreurs, procédez comme suit :

  • Pour les opérations DDL, telles que les reconstructions d'index ou les modifications de table, utilisez le kit d’outils Percona afin de ne pas générer des tables temporaires volumineuses. Pour plus d'informations, consultez la page pt-online-schema-change sur le site web de Percona.
  • Surveillez l'utilisation du stockage local.
  • Optimisez les requêtes et les structures de table.
  • Désactivez les journaux.
  • Mettez à l’échelle votre instance Aurora MySQL pour augmenter la capacité de stockage locale.

Informations connexes

Utiliser le moteur de stockage TempTable sur Amazon RDS pour MySQL et Amazon Aurora MySQL

Nouveau comportement de table temporaire dans Aurora MySQL version 3

Limites de stockage temporaire pour Aurora MySQL

AWS OFFICIELA mis à jour il y a 3 mois