La base de données crée des tables temporaires sur le disque - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

La base de données crée des tables temporaires sur le disque

Votre utilisation récente de tables temporaires sur disque a augmenté de manière significative, jusqu'à pourcentage. La base de données crée environ le nombre de tables temporaires par seconde. Cela peut avoir un impact sur les performances et augmenter les opérations sur le disque sur l'instance de base de données.

Versions de moteur prises en charge

Ces données d'insight sont prises en charge pour toutes les versions d'Aurora MySQL.

Contexte

Il est parfois nécessaire que le serveur MySQL crée une table temporaire interne lors du traitement d'une requête. Aurora MySQL peut contenir une table temporaire interne en mémoire, où elle peut être traitée par le moteur de stockage TempTable ou MEMORY, ou stockée sur disque par InnoDB. Pour plus d'informations, consultez Utilisation des tables temporaires internes dans MySQL dans le manuel de référence de MySQL.

Causes probables de ce problème

Une augmentation du nombre de tables temporaires sur disque indique l'utilisation de requêtes complexes. Si la mémoire configurée est insuffisante pour stocker des tables temporaires en mémoire, Aurora MySQL crée les tables sur disque. Cela peut avoir un impact sur les performances et augmenter les opérations sur le disque.

Actions

Nous vous recommandons différentes actions en fonction des causes de votre insight.

  • Pour Aurora MySQL version 3, nous vous recommandons d'utiliser le moteur de stockage TempTable.

  • Optimisez vos requêtes pour renvoyer moins de données en sélectionnant uniquement les colonnes nécessaires.

    Si vous activez le schéma de performance alors que tous les instruments statement sont activés et temporisés, vous pouvez effectuer une requête SYS.statements_with_temp_tables pour récupérer la liste des requêtes utilisant des tables temporaires. Pour plus d'informations, consultez Prérequis pour l'utilisation du schéma sys dans la documentation sur MySQL.

  • Envisagez d'indexer les colonnes impliquées dans les opérations de tri et de regroupement.

  • Réécrivez vos requêtes pour éviter les colonnes BLOB et TEXT. Ces colonnes utilisent toujours un disque.

  • Réglez les paramètres de base de données suivants : tmp_table_size et max_heap_table_size.

    La valeur par défaut de ces paramètres est 16 Mio. Lorsque vous utilisez le moteur de stockage MEMORY pour des tables temporaires en mémoire, leur taille maximale est définie par la plus petite des valeurs tmp_table_size et max_heap_table_size. Lorsque cette taille maximale est atteinte, MySQL convertit automatiquement la table temporaire interne en mémoire en une table temporaire interne sur disque InnoDB. Pour plus d'informations, consultez Utiliser le moteur de stockage TempTable sur Amazon RDS pour MySQL et Amazon Aurora MySQL.

    Note

    Lorsque vous créez explicitement des tables MEMORY avec CREATE TABLE, seule la variable max_heap_table_size détermine la taille maximale qu'une table peut prendre. Il n'y a pas non plus de conversion vers un format sur disque.

Métriques pertinentes

Les métriques suivantes d'analyse des performances sont liées à cet insight :

  • Created_tmp_disk_tables

  • Created_tmp_tables

Pour plus d'informations, consultez Created_tmp_disk_tables dans la documentation sur MySQL.