18 cosas que puede hacer para deshacerse de los cuellos de botella de MySQL causados ​​por el alto tráfico (Parte 3)

Esta es una serie de blogs de tres partes que se enfoca en lidiar con un evento inesperado de alto tráfico a medida que sucede. La primera parte se puede encontrar aquí, y la segunda parte se puede encontrar aquí.

13. Configure el servidor MySQL correctamente

Complejidad: Media
Impacto potencial: Alto

Un servidor MySQL mal configurado puede causar problemas graves, especialmente bajo una carga alta durante los picos de tráfico, pero no es tan difícil hacer lo básico correctamente. Si bien MySQL Server tiene más de 400 variables que puede ajustar, rara vez necesita cambiar más de 10 a 20 de ellas para obtener el 95 % del rendimiento posible para su carga de trabajo.

Esta publicación de blog cubre los principios más importantes.

14. Purgar datos innecesarios

Complejidad: Media
Impacto potencial: Medio

En igualdad de condiciones, cuantos más datos tenga, más lenta funcionará la base de datos. Deshacerse de (o archivar) los datos que no necesita tener disponibles en línea es una excelente manera de mejorar el rendimiento.

En muchos casos, encontrará que las aplicaciones mantienen varios registros en la base de datos que se remontan a varios años, donde tienen poco uso durante más de unas pocas semanas o unos pocos meses.

Pt-archiver de Percona Toolkit es una gran herramienta para archivar datos antiguos.

Nota: incluso si después de que termine la limpieza, tendrá un archivo de base de datos más ágil y rápido, el proceso en sí consume recursos adicionales y no es algo que deba hacer mientras su base de datos ya está sobrecargada.

15. Mantenimiento completo de la base de datos

Complejidad: Media
Impacto potencial: Medio

Cuando las cosas estaban tranquilas, podía seguir adelante sin mantener su base de datos. Sin embargo, como tal, las estadísticas de la base de datos pueden volverse obsoletas y sus tablas pueden estar fragmentadas y, de lo contrario, no estar en el estado más óptimo.

Ejecute OPTIMIZE TABLE en sus tablas para reconstruir para que sean más efectivos y para actualizar las estadísticas.

Para ejecutar OPTIMIZE para todas las tablas que puede ejecutar mysqlcheck-optimizar-A.

Tenga en cuenta que es probable que la optimización afecte su sistema aún más que la depuración de datos antiguos, por lo que no desea hacerlo durante una carga alta. Un buen enfoque podría ser eliminar sus réplicas (esclavos) del tráfico de servicio y ejecutar el proceso en ellos uno por uno al promocionar uno de esos esclavos a maestro.

16. Revisa tu trabajo de fondo

Complejidad: Media
Impacto potencial: Medio

Las tareas en segundo plano, como la copia de seguridad, el mantenimiento, la generación de informes y las grandes cargas de datos, a menudo no están bien optimizadas; pueden ejecutarse en un período más lento en el que el servidor MySQL puede manejar la carga adicional. Durante los picos de tráfico, pueden provocar una sobrecarga de la base de datos y tiempo de inactividad.

Otro problema con el trabajo en segundo plano que se ejecuta durante los picos de tráfico es la superposición o la formación de bolas de nieve. Si su trabajo en segundo plano normalmente dura 15 minutos y ha programado dos de ellos a las 2 a. m. y 3 a. m., generalmente solo uno de ellos se ejecuta a la vez. Sin embargo, debido al cargo adicional, ahora puede demorar hasta dos horas en ejecutarse y es posible que tenga varias tareas en segundo plano ejecutándose al mismo tiempo, lo que genera un cargo adicional y una posible corrupción de datos.

Revise su trabajo de fondo y haga las siguientes preguntas:

  • ¿Necesito este trabajo de fondo o se puede posponer?
  • ¿Se puede realizar este trabajo en una réplica? ¡Realizar diferentes tareas en diferentes réplicas puede ser una gran solución!
  • ¿Ha programado sus trabajos por lotes para asegurarse de que no se superpongan?
  • ¿Es posible optimizar un trabajo de fondo? Optimice las preguntas que utiliza o, si realiza una copia de seguridad con mysqldump, debe utilizar Percona Xtrabackup en su lugar, que es mucho más eficaz.
  • ¿Puedes limitar los recursos que utiliza este trabajo? Por ejemplo, limitar la competencia (número de conexiones paralelas) que utiliza un trabajo por lotes. O, si ejecuta Percona Xtrabackup y afecta el rendimiento de su servidor, puede acelerar las copias de seguridad.

17. Verifique los puntos de acceso de datos

Complejidad: Alta
Impacto potencial: Alto

Algunas aplicaciones escalan muy bien con la escala de hardware, otras no tanto. La diferencia suele ser cuando las aplicaciones se basan en «puntos de acceso», datos que deben actualizarse tan rápido que se convierten en un cuello de botella. Por ejemplo, si crea un solo contador en la base de datos donde se debe actualizar cada transacción, no escalaría bien.

Hay muchos tipos de hotspots, y algunos de ellos son difíciles de encontrar y diagnosticar. El más común es similar a la descripción anterior y se muestra como un nivel alto de bloqueo de fila esperado (y una tasa de bloqueo alta).

En Percona Monitoring and Management, puede consultar el panel de detalles de MySQL Innodb para ver qué parte del tiempo en general se dedica a esperar bloqueos de cola:

O vea las tasas de reversión:

InnoDB

Tenga en cuenta que las diferentes aplicaciones pueden tener diferentes valores normales para estos si los ve fuera de lo normal durante su evento de alto tráfico.

También puede examinar qué preguntas específicas tienen bloqueos de nivel de bloqueo largamente esperados:

seguimiento y gestión personal

Reducir los puntos de acceso puede ser tan fácil como agregar un mejor índice, o podría ser más difícil y requerir una reingeniería de la aplicación. De todos modos, lo he incluido aquí porque si está diseñando una aplicación con puntos de datos muy malos, es posible que las técnicas de optimización más fáciles mencionadas no funcionen para usted.

18. Configure su servidor de aplicaciones correctamente

Complejidad: Media
Impacto potencial: Medio

Al configurar el servidor MySQL, es extremadamente importante utilizar la configuración adecuada en su servidor de aplicaciones. Desea asegurarse de utilizar conexiones persistentes y desagregadas para cada pequeña transacción, especialmente si utiliza TLS/SSL para la conexión a la base de datos. Si está utilizando un grupo de conexiones, asegúrese de que esté configurado correctamente, especialmente si no está utilizando ProxySQL o Threadpool. Las recomendaciones específicas de optimización del rendimiento variarán según el lenguaje de programación, el marco ORM o el grupo de conexiones utilizado. ¡Vaya a Google para obtenerlas!

Resumen

Esta es una gran lista de consejos, y realmente hay muchas cosas que puede hacer durante los picos de tráfico para tener las cosas bajo control. La buena noticia es que no necesita seguir ninguno de estos consejos para obtener mejoras en el rendimiento y, en última instancia, complacer a sus clientes con un rendimiento fantástico de la aplicación (o al menos hacer feliz a su equipo de desarrollo cuando los datos básicos no son el problema). Tome estos consejos como un menú: vea lo que es más fácil de aplicar en su entorno y lo que es más probable que proporcione la mayor ganancia, ¡y utilícelo para guiar sus acciones!

Esta es una serie de blogs de tres partes. La primera parte se puede encontrar aquí, y la segunda parte se puede encontrar aquí.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario