Pregunta PHP + rendimiento del sitio MYSQL


Tengo que gestionar un sitio que no fue desarrollado por mí. Está en PHP usando una base de datos mysql, que se encuentra en el servidor web. El sitio, a veces (cuando los visitantes aumentan demasiado) deja de responder, o responde demasiado lento.

He desarrollado algunos sitios en PHP pero nunca me ocupé de la administración, así que realmente no sé por dónde empezar. El servidor (el disco duro) parece estar bien, cuando la web deja de responder, la CPU se está utilizando aproximadamente al 55% y tiene mucha memoria.

No le estoy pidiendo a alguien que resuelva este problema. Solo me gustaría que alguien me diera algunos consejos sobre dónde puedo encontrar los registros y cómo debería leerlos e interpretarlos. Entonces, de esa manera, podría saber si es el tráfico de red, la base de datos (qué consultas) o qué.

¡Gracias!

Actualizar: Olvidé decir: es un Windows Server 2003.

Nota: He grabado alrededor de un día con Jet Profiler. Realmente no entiendo toda la información que proporciona, pero hay una consulta que marca como muy lenta. Tiene sentido porque es una selección con una cláusula where que tiene tres condiciones similares. Inicialmente no incluí esto en mi pregunta porque cuando ejecuto la consulta desde MySQL Query Browser no toma mucho tiempo. Está bajo 0.01 segundos.


6
2018-06-12 17:10


origen


Preguntas clave antes de ofrecer cualquier diagnóstico / recomendaciones: ¿De qué nivel de tráfico está hablando aquí? ¿Es algo con picos de tráfico significativamente grandes, por ejemplo, ¿Desencadenado por eventos deportivos etc.? ¿Qué tipo de contenido hay? ¿Hay muchos objetos estáticos pequeños como gráficos, o hay objetos grandes como clips de audio / video, o ambos? ¿Cuánto del contenido es generado dinámicamente por PHP / MySQL?
Lo que, si es que aparece algo, se muestra en los registros de eventos del servidor (eventvwr es su amigo en Windows). Los tiempos de respuesta del servidor web ayudarían, usted no menciona a Apache, entonces, ¿está siendo servido por IIS? No es necesariamente el servidor DB, este es un diagnóstico frecuente frecuente en sistemas de alto tráfico. Por lo general, el servidor web en sí está sobrecargado y entrega contenido para el que no está optimizado. Aquí es donde entran los proxies inversos.
Acabo de responder por debajo de la pregunta. puede ser útil stackoverflow.com/questions/9954926/… - Senthil


Respuestas:


Por lo general, es la base de datos que ralentiza un sitio. Lo más probable es que tenga un puñado de consultas mal escritas / no indexadas y que sean las que causan la desaceleración. En MySQL, puede encontrar las consultas que tardan demasiado en responder al activar el Registro de consultas lentas.

Por lo general, esto implica los siguientes pasos:   1. Cree un archivo llamado algo así como slowqueries.log en la carpeta de registro de MySQL, generalmente /var/log/mysql/. Cambia sus permisos al usuario mysql usando chmod (Suponiendo que usted está en Linux).   2. Inicie sesión en mi sql como root y emita las siguientes consultas: set GLOBAL slow_query_log_file='/var/log/mysql/slowqueries.log'; -- sets the log file SET GLOBAL slow_query_log=1; -- turns on slow query logging

Una vez que identifique las consultas que tardan demasiado en ejecutarse, puede usar EXPLIQUE o EXPLICAR EXTENDIDO para seguir analizándolos y ver cómo se pueden optimizar, generalmente agregando índices / mejorando combinaciones.


2
2018-06-12 17:15



También me tomaría un minuto y ejecutaría SHOW PROCESSLIST contra su base de datos cuando la aplicación deje de responder. Esto le mostrará rápidamente si alguna tabla está bloqueada o si alguna consulta se ha estado ejecutando durante un largo período de tiempo.
¡Gracias! Intentaré seguir tus instrucciones. Mientras tanto, lea la nota que agregué a la pregunta. - Diego


Tuve problemas similares con un sitio web que estaba usando escrito en PHP con un servidor separado que ejecuta mysql. Pude usar Jmeter y un práctico complemento que le proporcionará un desglose basado en gráficos del estado de sus servidores: code.google.com/p/jmeter-plugins/wiki/PerfMon#Installation

Esto realmente puede ayudarlo a diagnosticar el problema, ya que podrá simular un número diferente de usuarios. En una nota al margen, pude usar el complemento APC para PHP que optimizó el código. Solo un pensamiento :-)


3
2018-06-12 18:30





Verifique las consultas de MySQL, si tiene acceso al panel en su servidor, vea qué está pasando. Las consultas de sql no optimizadas pueden hacer que su servidor se caiga (me ha pasado). Debe comenzar por eso, debe haber algo que no esté lo suficientemente optimizado y lo esté ralentizando, eso o su servidor no está funcionando bien.


1
2018-06-12 17:14