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.
synch/mutex/innodb/temp_pool_manager_mutex
L'événement synch/mutex/innodb/temp_pool_manager_mutex d'attente se produit lorsqu'une session attend d'acquérir un mutex pour gérer le pool de tablespaces temporaires de session.
Rubriques
Versions de moteur prises en charge
Ces informations relatives aux événements d’attente sont prises en charge pour les versions de moteur suivantes :
-
Aurora MySQL version 3
Contexte
Aurora MySQL version 3.x et versions ultérieures permet temp_pool_manager_mutex de contrôler plusieurs sessions accédant simultanément au pool d'espaces de table temporaires. Aurora MySQL gère le stockage via un volume de cluster Aurora pour les données persistantes et le stockage local pour les fichiers temporaires. Un tablespace temporaire est nécessaire lorsqu'une session crée une table temporaire sur le volume du cluster Aurora.
Lorsqu'une session demande pour la première fois un tablespace temporaire, MySQL alloue des tablespaces temporaires de session depuis le pool partagé. Une session peut contenir jusqu'à 2 tablespaces temporaires à la fois pour les types de tables suivants :
Tables temporaires créées par l'utilisateur
Tables temporaires internes générées par l'optimiseur
Le TempTable moteur par défaut utilise le mécanisme de débordement suivant pour gérer les tables temporaires :
-
Stocke les tables dans la RAM jusqu'à la
temptable_max_ramlimite. -
Se déplace vers les fichiers mappés en mémoire sur le stockage local lorsque la RAM est pleine.
-
Utilise le volume de cluster partagé lorsque les fichiers mappés en mémoire atteignent leur limite.
temptable_max_mmap
Lorsque les tables temporaires dépassent à la fois les limites de RAM et de stockage local, MySQL les gère à l'aide d'un espace disque logique.
Lorsqu'une session nécessite une table temporaire sur disque, MySQL :
-
Recherche les
INACTIVEtablespaces disponibles dans le pool à réutiliser. -
Crée 10 nouveaux tablespaces s'il n'en existe aucun
INACTIVE.
Lorsqu'une session se déconnecte, MySQL :
-
Tronque les tablespaces temporaires de la session.
-
Les marque comme INACTIFS dans le pool en vue de leur réutilisation.
-
Maintient la taille actuelle du pool jusqu'au redémarrage du serveur.
-
Revient à la taille du pool par défaut (10 tablespaces) après le redémarrage.
Causes probables de l’augmentation du nombre d’événements d’attente
Situations courantes à l'origine de cet événement d'attente :
Sessions simultanées créant des tables temporaires internes sur le volume du cluster.
Sessions simultanées créant des tables temporaires utilisateur sur le volume du cluster.
Fin soudaine de sessions utilisant des tablespaces actifs.
Expansion du pool de tablespaces lors de lourdes charges d'écriture.
Accès aux requêtes simultanées
INFORMATION_SCHEMA.
Actions
Nous vous recommandons différentes actions en fonction des causes de votre événement d’attente.
Rubriques
Surveillez et optimisez l'utilisation des tables temporaires
Pour surveiller et optimiser l'utilisation des tables temporaires, appliquez l'une des méthodes suivantes :
-
Consultez le
Created_tmp_disk_tablescompteur dans Performance Insights pour suivre la création de tables temporaires sur disque dans votre cluster Aurora. -
Exécutez cette commande dans votre base de données pour surveiller directement la création de tables temporaires :
mysql> show status like '%created_tmp_disk%'.
Note
Le comportement des tables temporaires diffère entre les nœuds de lecture et d'écriture Aurora MySQL. Pour de plus amples informations, veuillez consulter Nouveau comportement de table temporaire dans Aurora MySQL version 3.
Après avoir identifié les requêtes créant des tables temporaires, suivez les étapes d'optimisation suivantes :
-
EXPLAINÀ utiliser pour examiner les plans d'exécution des requêtes et identifier où et pourquoi les tables temporaires sont créées. -
Modifiez les requêtes pour réduire l'utilisation des tables temporaires dans la mesure du possible.
Si l'optimisation des requêtes ne résout pas à elle seule les problèmes de performances, pensez à ajuster les paramètres de configuration suivants :
-
temptable_max_ram- Contrôle l'utilisation maximale de la RAM pour les tables temporaires. -
temptable_max_mmap- Définit la limite pour le stockage de fichiers mappé en mémoire. -
tmp_table_size- S'applique lorsqu' aurora_tmptable_enable_per_table_limitil est activé (désactivé par défaut).
Important
Notez que certaines conditions de requête nécessiteront toujours des tables temporaires sur disque, quels que soient les paramètres de configuration. Pour plus d'informations sur le moteur de TempTable stockage, consultez Utiliser le moteur TempTable de stockage sur Amazon RDS for MySQL et Amazon Aurora MySQL
Révision des requêtes à l'aide de INFORMATION_SCHEMA
Lorsque vous interrogez INFORMATION_SCHEMA des tables, MySQL crée des tables temporaires InnoDB sur le volume du cluster. Chaque session a besoin d'un tablespace temporaire pour ces tables, ce qui peut entraîner des problèmes de performances en cas d'accès simultané élevé.
Pour améliorer les performances :
-
À utiliser
PERFORMANCE_SCHEMAau lieu deINFORMATION_SCHEMAlà où c'est possible. -
Si vous devez en utiliser
INFORMATION_SCHEMA, réduisez la fréquence à laquelle vous exécutez ces requêtes.
Augmenter le paramètre innodb_sync_array_size
Le innodb_sync_array_size paramètre contrôle la taille du tableau d' mutex/lock attente dans MySQL. La valeur par défaut de 1 fonctionne pour les charges de travail générales, mais son augmentation peut réduire la contention des threads en cas de forte simultanéité.
Lorsque votre charge de travail affiche un nombre croissant de threads en attente :
-
Surveillez le nombre de threads en attente dans votre charge de travail.
-
Définissez un nombre
innodb_sync_array_sizeégal ou supérieur au nombre de vCPU de votre instance pour diviser la structure de coordination des threads et réduire les conflits.
Note
Pour déterminer le nombre de v CPUs disponibles sur votre instance RDS, consultez les spécifications des vCPU dans les types d'instances Amazon RDS
Implémenter un groupe de connexions
MySQL attribue un tablespace dédié à chaque session qui crée une table temporaire. Ce tablespace reste actif jusqu'à la fin de la connexion à la base de données. Pour gérer vos ressources de manière plus efficace :
-
Implémentez le regroupement de connexions pour limiter le nombre de tablespaces temporaires actifs.
-
Réutilisez les connexions existantes au lieu d'en créer de nouvelles pour chaque opération.