MySQL gasta muito tempo limpando tabelas tmp

MySQL gasta muito tempo limpando tabelas tmp

Estou executando algumas migrações do Django em uma instância MySQL do AWS RDS. Minha equipe testou as migrações minuciosamente e elas funcionaram bem (mesmo demorando menos de 30 minutos quando executadas em nossos laptops em uma cópia de nossos dados de produção).

Agora que estamos migrando o banco de dados de produção, isso levará mais de 2 horas. Quando corro:

mysql> SHOW PROCESSLIST;

Posso ver o processo ativo e ele está fazendo coisas, mas muito lentamente. Nossas migrações estão no meio de uma migração de dados, e as instruções SELECT (estamos buscando linhas por meio do ORM em lotes de 100) estão demorando até 32 segundos cada. Os últimos 30 segundos são gastos no estado de "removendo tabela tmp".

Alguma ideia do que está causando isso?

Responder1

estamos buscando linhas por meio do ORM em lotes de 100

Consultas ineficientes para agrupar os dados em lote. Como o SGBD está usando tabelas temporárias, ele precisa examinar MUITO, MUITO mais dados do que os incluídos no conjunto de dados de saída - e a maior parte deles está sendo descartada.

Vá para StackOverflow e poste seu esquema e as consultas que você está usando para extrair os dados para obter conselhos mais específicos - mas IME, ORM está tão quebrado em princípio que geralmente é mais fácil mudar para fábricas do que tentar fazê-lo funcionar de forma eficiente/ de forma confiável.

informação relacionada