tips - ¿La mejor herramienta de ajuste de rendimiento MySQL?
mysql views performance (3)
¿Cuál es la mejor herramienta de rendimiento amigable para el usuario para MySQL? Me gustaría ayuda para localizar el cuello de la botella de mi configuración. ¿El problema está en las sentencias de SQL, las variables de configuración o alguna otra cosa?
EXPLAIN es tu amigo. Aparte de eso, debe confiar en una mezcla de herramientas ad-hoc, pruebas y herramientas del sistema operativo para ver exactamente qué está pasando.
Se pueden ver muchas cosas de manera efectiva desde las herramientas del sistema operativo (buenas para determinar si una situación es CPU o E / S) o las diversas variables que se pueden ver en MySQL (mostrar variables globales, mostrar el estado del motor, etc.).
Siento que es realmente importante tener un ENTORNO DE PRUEBA DE RENDIMIENTO. Obtenga una base de datos de tamaño de producción con carga similar a la producción (usando simulación de carga) ejecutándose en hardware de producción en su laboratorio (costosa pero esencial).
Una vez que hayas hecho eso, puedes ajustar cualquier parámetro que desees con total seguridad, sabiendo que incluso si se derrite todo el servidor, puedes reconstruirlo sin afectar nada.
No haga cosas específicas que las personas sugieran a menos que las haya probado en su entorno de prueba de rendimiento y las haya comprobado como beneficiosas.
Básicamente, la optimización del rendimiento suele ver tres áreas, en este orden:
- Estructura de su base de datos en sí (estructura de la tabla, índices, etc.)
- Consultas
- Ajuste de los parámetros del servidor
Los dos primeros a menudo se pasan por alto a favor del último, lo que puede ayudar, pero solo después de que los primeros dos hayan terminado.
No subestime la importancia de reducir la cantidad de trabajo que el servidor debe hacer: usar campos más pequeños, menos filas, menos columnas, etc. siempre es mejor.
Las malas noticias: hay herramientas GUI para ayudar con esto, pero es un trabajo calificado y amplio. Por lo tanto, no cubren todo, es probable que necesites usar instrucciones de línea de comando / sql, etc. para ayudar. Realmente solo he usado las herramientas de línea de comando. Daré una breve descripción de las cosas que sé / he usado:
Primero, necesitas un buen diseño de base de datos. Si el diseño es malo, solo puedes llegar tan lejos. Esto incluye la normalización, así como el uso de tipos apropiados para los campos. Dejaré este punto aquí, ya que creo que está un poco a un lado, y no lo que busca.
Asegúrate de que MySQL Query Cache esté configurado y en funcionamiento, y dale un poco más de RAM si puedes, y asegúrate de que tus consultas importantes no estén haciendo nada que impida que mysql las guarde en caché. Por ejemplo, el uso de la función NOW () en las consultas lo hace, por razones obvias, ¡NOW cambia cada segundo! En su lugar, puede poner una marca de tiempo en el sql, y usar la hora al minuto / hora / día más cercano (el período más largo con el que puede salirse con la suya) para permitir que mysql obtenga algún beneficio de almacenamiento en caché.
Para comenzar a optimizar las cosas: si se "EXPLAIN" al frente de SELECCIONAR, se puede observar cómo se está ejecutando una consulta e idear cómo mejorarla. Aprenda a interpretar el resultado: 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á tiempos en que las consultas deben ser reestructuradas.
Comenzar a mejorar el rendimiento con MySQL (suponiendo que usted ya no sepa cuál es la consulta problemática) es verificar el registro lento de consultas: registra en un archivo todas las consultas que toman más de x segundos.
Descripción general, incluida la configuración de si ya no está registrando esto, está aquí: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - También he encontrado que establecer long_query_time para 0 por un día más o menos, para que todas las consultas se registren aquí con el tiempo necesario, es una forma útil de hacerse una idea de a dónde va exactamente el rendimiento. ¡Pero yo no iría allí de inmediato! Y no lo dejes, los registros pueden volverse masivos.
Una vez que tienes unos pocos días de registro, he encontrado mysqlsla (analizador de registro lento mysql) desde aquí: http://hackmysql.com/mysqlsla es una buena herramienta.
Puede hacer algo más que solo ralentizar el análisis de registro de consultas: lea el manual. Pero para explicar lo que hace para los registros lentos: el registro lento de consultas 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: factor de 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 ti. Se ejecuta a través del registro y puede agrupar consultas que son iguales / tienen valores diferentes en las cláusulas where. Luego le presenta (de manera predeterminada) las 10 consultas principales en términos de tiempo total de ejecución, que a menudo tiene algunas sorpresas, pero generalmente es el punto de partida más productivo, tome la consulta más cara y use EXPLAIN en ella y vea si puede mejorar eso.
Algunas consultas tardan 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 se requiere cambiar el esquema DB. 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á establecido en 0), incluso si se ejecutan bastante rápido. Tal vez es hora de agregar un poco 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 analizar con mayor detalle 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 estar mal en rojo, y puede ayudarle vea dónde puede obtener beneficios asignando recursos del sistema. No sé mucho sobre esto: mi enfoque siempre ha sido que si algo es rojo y se ve mal, ir a leer sobre él y decidir si es importante y si debería 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 algunas veces y observa los cambios. Recientemente descubrí un servidor que usaba todas las conexiones de mysql disponibles para ejecutar una consulta idéntica con este método. Claro, habría estado en el registro lento de consultas, pero esta era una manera muy rápida y obvia de ver qué sucedía.
Encontré que MONyog era una GRAN ayuda cuando tenía un servidor mysql en sufrimiento.
Es un sistema basado en web que analiza su sistema las 24 horas del día, los 7 días de la semana, y le ofrece sugerencias decentes para obtener mejores valores de variables del sistema, tamaños de caché, etc.
También tiene una función de analizador de consultas lentas tipo mysqlsla.
Lástima que no es gratis.
MONyog-MySQL Monitor and Advisor tiene una nueva interfaz de usuario que me encanta, me gustan principalmente estas características:
- Encuentre el problema SQL - usando registro lento, registro general, LISTA DE PROCESOS y a través de PROXY
- Alerta en condiciones críticas como - El servidor está caído, demasiadas conexiones, etc.
- Controle periódicamente su propio resultado de consulta
Monitoreo de Replicación
etc .... Completa lista de características