PHP / mySQL: ¿cómo depurar un error de 'demasiadas conexiones'?

8

Estoy trabajando ahora mismo con el sitio web de PHP en el servidor dedicado de mi cliente y recibo periódicamente un error, too many connectionspero ~ 5 usuarios están navegando por esta página.

En phpMyAdminpuedo ver que la max connectionsvariable se establece en 400.

En nuestro servidor MySQL local en mi corporación, hemos max connectionsestablecido 200y otros usos de compañeros en este servidor al mismo tiempo.

Escuché que en su servidor alguna otra web está usando el mismo MySQL con gran tráfico.

Aquí están mis preguntas:

  • ¿Cómo depurar este problema?
  • ¿Puedo consultar alguna lista de consultas SQL que se ejecutó en los últimos 10 minutos para verificar si es nuestro problema o el suyo?
hsz
fuente

Respuestas:

2

Los síntomas que describe apuntan a conexiones persistentes. En algunas configuraciones, PHP no maneja muy bien las conexiones persistentes: tiende a abrir nuevas conexiones en lugar de reutilizar las existentes. Le sugiero que desactive esta función y vea si el problema persiste:

Si nota una mejora, puede intentar ajustar las llamadas persistentes o deshacerse de ellas permanentemente.

Álvaro González
fuente
También filmo ese caso. En absoluto, no puedo modificar su configuración web / servidor para hacer esos cambios (mi web no usa en persistent connectionsningún lado). Mañana voy a conocer a su hombre y les pediré que lo hagan.
hsz
Esto no requiere modificar ninguna configuración del servidor. Solo necesitaría actualizar los scripts PHP para la aplicación.
Michael Mior
Claro, pero no tengo acceso a la segunda página web que también está usando el mismo servidor MySql, por lo que no puedo actualizar su script PHP que puede usar mysql_pconnect. phpinfo()me muestra que `mysql.allow_persistent` es On. Cambiar esa bandera a Offno dará ningún resultado en absoluto: debe cambiarse en su máquina.
hsz
Cambiaron mysql.allow_persistenta Offy nuestro CMS acelerados y ahora no hay problemas con las conexiones. ¡Gracias! Pero todavía me pregunto cómo verificar qué scripts se conectaban con el servidor MySql.
hsz
SHOW PROCESSLIST le dice al usuario, host, DB y (si tiene suerte) consulta.
Álvaro González