Estamos tendo problemas com os usuários que executam consultas / visualizações no Drupal que ocasionalmente fazem com que nosso site congele. O congelamento ocorre porque a consulta faz com que o número de conexões com o banco de dados suba para mais de 400 e, basicamente, sempre que o site ultrapassar 100 conexões com o banco de dados, o site fica muito lento e simplesmente não responde.
Estamos executando o Amazon RDS usando o MySQL Red Hat Linux
Temos um EC2 grande o suficiente no servidor de aplicativos front-end e um RDS grande o suficiente.
A maneira como estamos corrigindo esse problema agora é encontrar a consulta incorreta e matá-la. Depois que a consulta é encerrada ... nossas conexões com o banco de dados caem para cerca de 20, que é a quantidade normal que você vê ao monitorar as estatísticas do site.
Existe uma maneira de parar a consulta incorreta e matá-la antes que ela demore muito e consuma as conexões? Eu estou tentando automatizar a eliminação da consulta incorreta antes que ela aconteça ou, pelo menos, após 30 segundos, é uma consulta incorreta e a mata.
fonte
Respostas:
Aqui está um procedimento armazenado para eliminar SELECTs de execução longa
Para eliminar SELECTs em execução por mais de 30 segundos, você executa este
Se você quiser ver as conexões sendo mortas, execute este
Talvez você possa criar um evento MySQL para chamar esse procedimento armazenado a cada minuto.
Se a Amazon não permitir que você tenha o privilégio EVENT , será necessário gravar um script de shell externo no servidor EC2 para conectar-se ao banco de dados e executar o Procedimento armazenado. Esse script de shell pode ser colocado em um crontab.
Se a Amazon não permitir que você tenha os privilégios PROCESS e SUPER , pode ser necessário mover o banco de dados para fora do RDS e para outra instância do EC2 executando o MySQL para fazer isso. Você pode criar o evento MySQL sem as restrições de hospedagem da Amazon.
fonte