sql >> Base de Datos >  >> RDS >> Mysql

¿La mejor herramienta de ajuste de rendimiento de MySQL?

La mala noticia:existen herramientas GUI para ayudar con esto, pero es un trabajo calificado y de amplio alcance. Por lo tanto, no cubren todo, es probable que necesite usar instrucciones de línea de comando/sql, etc. para ayudar. Realmente solo he usado las herramientas de línea de comando. Daré una pequeña descripción general de las cosas que sé/he usado:

Primero, necesita un buen diseño de base de datos. Si el diseño es malo, solo puedes llegar hasta cierto punto. Esto incluye la normalización, así como el uso de tipos apropiados para los campos. Dejaré este punto aquí, ya que creo que es un poco aparte, y no es lo que buscas.

Asegúrese de que MySQL Query Cache esté configurado y funcionando y dele un poco más de RAM si puede, y asegúrese de que sus consultas importantes no estén haciendo nada que impida que mysql las almacene en caché. Por ejemplo, usar la función NOW() en las consultas hace esto, por razones obvias, ¡NOW cambia cada segundo! En su lugar, puede poner una marca de tiempo en el sql y usar el tiempo al minuto/hora/día más cercano (el período más largo que puede salirse con la suya) para permitir que mysql obtenga algún beneficio de almacenamiento en caché.

Para comenzar a optimizar las cosas:pegar "EXPLICAR" delante de seleccionar es LA forma de ver cómo se ejecuta una consulta e identificar cómo mejorarla. Aprenda a interpretar la salida:http://dev.mysql .com/doc/refman/5.0/en/using-explain.html A menudo podrá agregar nuevos índices/agregar columnas a los existentes para mejorar las cosas. Pero también encontrará ocasiones en las que será necesario reestructurar las consultas.

Comenzar a mejorar el rendimiento con MySQL (suponiendo que aún no sepa cuál es la consulta problemática) es comprobar el registro de consultas lentas:registra en un archivo todas las consultas que tardan más de x segundos.

La descripción general, incluida la configuración si aún no está registrando esto, está aquí:http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - También descubrí que establecer long_query_time en 0 durante un día más o menos, de modo que todas las consultas se registren aquí con el tiempo empleado, es una forma útil de tener una idea exacta de hacia dónde se dirige el rendimiento. ¡Pero no iría allí inmediatamente! Y no lo dejes encendido, los registros pueden volverse masivos.

Una vez que tenga unos días de registro, encontré mysqlsla (analizador de registro lento de mysql) desde aquí:http://hackmysql.com/mysqlsla es una buena herramienta

Puede hacer algo más que un análisis lento del registro de consultas:lea el manual. Pero para explicar lo que hace con los registros lentos:el registro de consultas lentas puede contener una gran cantidad de datos, por lo que puede ser difícil determinar qué consultas son las más costosas en general, por ejemplo:tenga en cuenta cuántas veces se ejecutan y cuándo dos consultas. son en realidad lo mismo con una identificación diferente en una cláusula where.

MySQL sla hace todo esto por usted. Se ejecuta a través del registro y puede agrupar consultas que son iguales o tienen valores diferentes en las cláusulas where. Luego le presenta (de forma predeterminada) las 10 consultas principales en términos de tiempo total de ejecución, que a menudo tiene algunas sorpresas, pero suele ser el punto de partida más productivo:tome la consulta más costosa y use EXPLICAR en ella y vea si puede mejorar eso.

Algunas consultas toman mucho tiempo y no se pueden mejorar fácilmente. En este caso, ¿puede obtener los datos de otra manera o al menos almacenarlos en caché? Incluso puede encontrar que es necesario cambiar el esquema de la base de datos. Del mismo modo, algunas consultas pueden estar en la parte superior de la salida de mysqlsla porque las ejecuta mucho (especialmente cierto si long_query_time está configurado en 0), incluso si se ejecutan bastante rápido. ¿Tal vez sea hora de agregar algo de almacenamiento en caché a su aplicación?

http://www.maatkit.org/ también parece prometedor:nunca lo usé, pero la herramienta mk-query-profiler debería ser útil para investigar más a fondo por qué las consultas se ralentizan.

Una cosa completamente separada para mirar también:la página de "estado" en PHPMYADMIN (o puede ejecutar todas las consultas para generar esta información ...) - resalta las cosas que cree que podrían ser malas en rojo y puede ayudarlo vea dónde puede beneficiarse de la asignación de recursos del sistema. No sé mucho sobre esto:mi enfoque siempre ha sido que si algo está rojo y se ve mal, ir y leer sobre eso y decidir si es importante y si debo hacer algo (generalmente significa asignar más recursos a MySQL cambiando la configuración).

Recientemente descubrí que ejecutar SHOW PROCESSLIST también puede ser útil en un servidor que está sufriendo. Si bien solo le brinda información en vivo (bueno, una instantánea en vivo), puede ayudarlo a tener una idea de lo que está sucediendo en un momento dado, especialmente si actualiza varias veces y observa los cambios. Recientemente vi un servidor que usaba cada conexión mysql disponible para ejecutar una consulta idéntica usando este método. Claro, habría estado en el registro de consultas lentas, pero esta es una forma realmente rápida y obvia de ver qué estaba pasando.