Tenemos problemas con los usuarios que ejecutan consultas / vistas en Drupal que ocasionalmente hacen que nuestro sitio se congele. La congelación se produce porque la consulta hace que el número de conexiones de la base de datos aumente a más de 400 y, básicamente, cada vez que el sitio supera las 100 conexiones de la base de datos, el sitio se ralentiza terriblemente y simplemente no responde.
Estamos ejecutando Amazon RDS usando MySQL Red Hat Linux
Tenemos un EC2 lo suficientemente grande en el servidor de aplicaciones front-end y un RDS lo suficientemente grande.
La forma en que estamos solucionando este problema ahora es encontrar la consulta ofensiva y eliminarla. Una vez que se finaliza la consulta ... nuestras conexiones de base de datos caen a alrededor de 20, que es la cantidad normal que se ve al monitorear las estadísticas del sitio.
¿Hay alguna manera de detener la consulta ofensiva y eliminarla antes de que se ejecute demasiado tiempo y consuma las conexiones? Estoy tratando de automatizar la eliminación de la consulta incorrecta antes de que ocurra, o al menos me doy cuenta después de 30 segundos de que es una consulta incorrecta y la elimino.
fuente
Respuestas:
Aquí hay un procedimiento almacenado para matar SELECTs de larga ejecución
Para eliminar SELECTs que se ejecutan por más de 30 segundos, ejecute esto
Si desea ver que se corten las conexiones, ejecute esto
Quizás pueda crear un evento MySQL para llamar a este Procedimiento almacenado cada minuto.
Si Amazon no le permite tener el privilegio EVENT , deberá escribir un script de shell externo en el servidor EC2 para conectarse a la base de datos y ejecutar el Procedimiento almacenado. Ese script de shell se puede poner en un crontab.
Si Amazon no le permite tener los privilegios de PROCESO y SUPER , es posible que deba mover la base de datos fuera de RDS a otra instancia de EC2 que ejecute MySQL para lograr esto. Luego, podría crear el evento MySQL sin las restricciones de alojamiento de Amazon.
fuente