synch/mutex/innodb/temp_pool_manager_mutex
O evento de espera synch/mutex/innodb/temp_pool_manager_mutex ocorre quando uma sessão está aguardando para adquirir um mutex para gerenciar o grupo de espaços para tabela temporários de sessão.
Versões compatíveis do mecanismo
Essas informações de eventos de espera têm suporte nas seguintes versões do mecanismo:
-
Aurora MySQL versão 3
Contexto
O Aurora MySQL versão 3.x e posterior usa temp_pool_manager_mutex para controlar várias sessões acessando o grupo temporário de espaços para tabela ao mesmo tempo. O Aurora MySQL gerencia o armazenamento por meio de um volume de cluster do Aurora para dados persistentes e armazenamento local para arquivos temporários. Um espaço para tabela temporário é necessário quando uma sessão cria uma tabela temporária no volume de cluster do Aurora.
Quando uma sessão solicita pela primeira vez um espaço para tabela temporário, o MySQL aloca espaços para tabela temporários da sessão do grupo compartilhado. Uma sessão pode conter até dois espaços para tabela temporários por vez para os seguintes tipos de tabela:
Tabelas temporárias criadas pelo usuário.
Tabelas temporárias internas geradas pelo otimizador
O mecanismo TempTable padrão usa o seguinte mecanismo de transbordamento para lidar com tabelas temporárias:
-
Armazena tabelas na RAM até o limite
temptable_max_ram. -
Muda para arquivos mapeados na memória no armazenamento local quando a RAM está cheia.
-
Usa o volume do cluster compartilhado quando os arquivos mapeados na memória atingem o limite
temptable_max_mmap.
Depois que as tabelas temporárias excedem os limites da RAM e do armazenamento local, o MySQL as gerencia usando o espaço para tabela em disco.
Quando uma sessão exige uma tabela temporária em disco, o MySQL:
-
Procura espaços para tabela
INACTIVEdisponíveis no grupo para reutilização. -
Criará dez espaços para tabela se não existirem espaços
INACTIVE.
Quando uma sessão é desconectada, o MySQL:
-
Trunca os espaços para tabela temporários da sessão.
-
Marca-os como INACTIVE no grupo para reutilização.
-
Mantém o tamanho atual do grupo até a reinicialização do servidor.
-
Volta ao tamanho padrão do grupo (dez espaços para tabela) após a reinicialização.
Possíveis causas do maior número de esperas
Situações comuns que causam esse evento de espera:
Sessões simultâneas que criam tabelas temporárias internas no volume do cluster.
Sessões simultâneas que criam tabelas temporárias no volume do cluster.
Encerramento repentino de sessões que usam espaços para tabela ativos.
Expansão do grupo de espaços para tabela durante workloads com uso intenso de gravação.
Consultas simultâneas que acessam
INFORMATION_SCHEMA.
Ações
Recomenda-se ações distintas, dependendo dos motivos do evento de espera.
Tópicos
Monitorar e otimizar o uso de tabelas temporárias
Para monitorar e otimizar o uso de tabelas temporárias, use um destes métodos:
-
Confira o contador
Created_tmp_disk_tablesno Insights de Performance para monitorar a criação de tabelas temporárias em disco no cluster do Aurora. -
Execute este comando em seu banco de dados para monitorar diretamente a criação de tabelas temporárias:
mysql> show status like '%created_tmp_disk%'.
nota
O comportamento da tabela temporária difere entre os nós de leitura e gravação do Aurora MySQL. Para obter mais informações, consulte Novo comportamento de tabela temporária no Aurora MySQL versão 3.
Depois de identificar as consultas que criam tabelas temporárias, siga estas etapas de otimização:
-
Use
EXPLAINpara examinar os planos de execução de consultas e identificar onde e por que as tabelas temporárias estão sendo criadas. -
Modifique as consultas para reduzir o uso de tabelas temporárias sempre que possível.
Se a otimização de consultas por si só não resolver os problemas de performance, pense em ajustar estes parâmetros de configuração:
-
temptable_max_ram: controla o uso máximo de RAM para tabelas temporárias. -
temptable_max_mmap: define o limite para armazenamento de arquivos mapeados na memória. -
tmp_table_size: aplica-se quando aurora_tmptable_enable_per_table_limitestá habilitado (desabilitado por padrão).
Importante
Observe que determinadas condições de consulta sempre exigirão tabelas temporárias em disco, independentemente das configurações. Para acessar mais informações sobre o mecanismo de armazenamento TempTable, consulte Use the TempTable storage engine on Amazon RDS for MySQL and Amazon Aurora MySQL
Analisar as consultas usando INFORMATION_SCHEMA
Quando você consulta tabelas INFORMATION_SCHEMA, o MySQL cria tabelas temporárias do InnoDB no volume do cluster. Cada sessão precisa de um espaço para tabela temporário para essas tabelas, o que pode causar problemas de performance durante o alto acesso simultâneo.
Para melhorar a performance:
-
Use
PERFORMANCE_SCHEMAem vez deINFORMATION_SCHEMAsempre que possível. -
Se você precisar usar
INFORMATION_SCHEMA, reduza a frequência com que você executa essas consultas.
Aumentar o parâmetro innodb_sync_array_size
O parâmetro innodb_sync_array_size controla o tamanho da matriz de espera mutex/lock no MySQL. O valor padrão de 1 funciona para workloads gerais, mas aumentá-lo pode reduzir a contenção de threads durante a alta simultaneidade.
Quando sua workload mostra um número crescente de threads de espera:
-
Monitore o número de threads de espera em sua workload.
-
Defina
innodb_sync_array_sizeigual ou superior à contagem de vCPUs da sua instância para dividir a estrutura de coordenação de threads e reduzir a contenção.
nota
Para determinar o número de vCPUs disponíveis em sua instância do RDS, consulte as especificações da vCPU em Tipos de instância do Amazon RDS
Implementar um pool de conexões
O MySQL atribui um espaço para tabela dedicado a cada sessão que cria uma tabela temporária. Esse espaço para tabela permanece ativo até que a conexão com o banco de dados termine. Para gerenciar seus recursos com maior eficiência:
-
Implemente o agrupamento de conexões para limitar o número de espaços para tabelas temporários ativos.
-
Reutilize as conexões existentes em vez de criar outras para cada operação.