Las bases de datos desempeñan un papel fundamental en el rendimiento de cualquier aplicación. Las bases de datos MySQL no son una excepción. Por este motivo, es importante conocer las numerosas formas en las que el ajuste, el diseño y la configuración de la base de datos pueden ayudarte a mejorar el rendimiento de tu aplicación. A continuación, se indican algunas formas de optimizar MySQL para conseguir un rendimiento óptimo.
Ajuste de consultas
El ajuste del rendimiento de la base de datos empieza desde la aplicación. La forma en que la aplicación traduce los requisitos empresariales a las consultas de la base de datos supone una gran diferencia en la complejidad y la eficiencia de la aplicación. La medida real de rendimiento es la eficiencia con la que cada instancia de base de datos contribuye a las necesidades empresariales.
Diseño de esquema
La definición de entidades y relaciones en una base de datos relacional determina lo sencilla o compleja que puede ser una respuesta a una consulta a una base de datos. También desempeña un papel importante el modo en que se definen la clave principal y los índices secundarios.
Configuración del servidor
La configuración del servidor se encarga de optimizar y maximizar la utilización de los recursos del sistema. Los recursos del sistema son los núcleos de las unidades de procesamiento centrales (CPU), la memoria de la máquina física o de la máquina virtual, el sistema de almacenamiento subyacente y la red.
Ajuste del servidor dinámico
Supervisión continua, optimización y ajuste del rendimiento para adaptar las cargas de trabajo de las bases de datos a la dinámica del mundo real.
Este artículo se centra en el ajuste de las consultas. El resto de los temas se tratarán en artículos posteriores.
A menudo, el proceso de ajuste de la consulta se inicia analizando la consulta de la base de datos. Sería mejor empezar evaluando cómo de eficientemente se ha convertido el requisito empresarial en consulta de base de datos. La interpretación y el procesamiento de una necesidad empresarial en una consulta determina lo pequeño o grande que sería el coste.
El primer paso es dar prioridad a las consultas que se quieren optimizar:
Estas dos categorías se deben optimizar durante el diseño del esquema de la base de datos.
Una transacción es una unidad lógica en la que todas las declaraciones contenidas se confirman o se restauran. Transacción es la función que proporciona atomicidad, coherencia, aislamiento y durabilidad (ACID) para MySQL.
En InnoDB, el motor de almacenamiento de MySQL, todas las actividades de usuario se producen en una transacción. El modo de confirmación automática está habilitado de forma predeterminada, lo que significa que cada declaración SQL forma una sola transacción. Para hacer una transacción con varias declaraciones cuando la confirmación automática está habilitada, empieza la transacción explícitamente con START_TRANSACTION o START_TRANSACTION y termina con START_TRANSACTION o START_TRANSACTION. Si se inhabilita el modo de confirmación automática, la sesión siempre tendrá una transacción abierta hasta que una sentencia COMMIT o COMMIT la termine y empiece una nueva.
Las prácticas recomendadas en el caso de las transacciones sugieren que sean lo más cortas posible. Esto se debe a que las transacciones largas tienen varios inconvenientes, tal como se describe más adelante en este artículo.
1. Contenciones de bloqueo prolongadas, que provocan consultas más lentas y posibles errores de consulta
2. El rendimiento del servidor ha empeorado debido a la gran cantidad de registros de cancelación de modificaciones
3. Aumento del uso del disco
4. Tiempo de cierre prolongado
5. Tiempo prolongado de recuperación tras fallos
Las consultas se pueden capturar en la aplicación o en la base de datos.
Te recomendamos que registres las consultas de la base de datos y el tiempo de ejecución de las consultas. El almacenamiento de registros de la aplicación facilita la evaluación de la eficacia y la eficiencia de las consultas en el contexto de su negocio. Por ejemplo, los usuarios pueden registrar el tiempo de respuesta de cada consulta o el tiempo de respuesta de ciertas funciones. También es una forma sencilla de obtener el tiempo total de ejecución de las transacciones con varias declaraciones.
Además, el tiempo de respuesta a las consultas que se mide a partir del registro en la aplicación es de extremo a extremo, incluido el tiempo de red. Esta función complementa el tiempo de ejecución de las consultas registrado desde la base de datos y facilita identificar si el problema está relacionado con la red o con la base de datos.
Información valiosa sobre las consultas de Cloud SQL de MySQL
La herramienta de información útil sobre las consultas de Cloud SQL permite capturar, monitorizar y diagnosticar consultas.
Con la información útil sobre las consultas, puedes encontrar fácilmente las principales consultas según el tiempo de ejecución y la frecuencia de ejecución.
La herramienta tiene opciones de filtrado, como el intervalo de tiempo, la base de datos, la cuenta de usuario y la dirección de cliente. Tiene gráficos para mostrar el uso de CPU y un desglose de las esperas de E/S y de bloqueo. En la tabla "Consultas y etiquetas principales" se muestran las consultas populares por tiempo de ejecución con las consultas normalizadas. Además del tiempo de ejecución, incluye estadísticas sobre la media de filas analizadas y la media de filas devueltas, que ofrecen información valiosa sobre la eficiencia de las consultas.
Consulta la documentación para ver todo lo que ofrece y cómo habilitarla.
Usar el esquema de rendimiento
En Cloud SQL para MySQL, la función performance_schema está habilitada de forma predeterminada en las versiones 8.0.26 y superiores de MySQL con 15 GB o más de memoria. Para habilitarla o inhabilitarla, es necesario reiniciar la instancia.
Cuando performance_schema=ON, los instrumentos de la declaración de consulta están habilitados de forma predeterminada. La tabla sys.statement_analysis proporciona estadísticas agregadas para las consultas normalizadas. Responde a preguntas como las siguientes:
Si utilizas MySQL Workbench, tendrás informes de esquema de rendimiento basados en la vista sys. El informe cuenta con una sección sobre declaraciones SQL de alto coste en la que se proporciona información valiosa sobre el rendimiento de las consultas.
Usa un registro lento y herramientas
El registro lento captura todas las consultas que se ejecutan durante más tiempo que el campo long_query_time. También registra el tiempo de ejecución de las consultas, el tiempo de bloqueo, las filas de datos examinadas y las filas de datos enviadas. Las estadísticas de ejecución adicionales hacen que sea un candidato preferido para analizar las consultas de la base de datos que usan el registro general.
Te recomendamos que tengas habilitado el registro lento. Normalmente, long_query_time se debe mantener en un umbral razonable para capturar las consultas que quieras ver y optimizar.
log_output=FILE
slow_query_log=ACTIVADO
long_query_time=2
De vez en cuando, es recomendable configurar long_query_time=0 para capturar todas las consultas durante un breve periodo y obtener un resumen del volumen y el rendimiento de las consultas.
Hay herramientas, como mysqldumpslow y pt-query-digest, que extraerían firmas de la consulta y generarían un informe para mostrar estadísticas de consulta.
Hay otras herramientas de monitorización de terceros que generan informes sobre estadísticas de consultas, como Percona Monitoring and Management, SolarWinds Database Performance Monitor (anteriormente, VividCortex) y más.
Después de capturar las consultas de las transacciones, el siguiente paso es optimizarlas.
El comando EXPLAIN proporciona el plan de ejecución de consultas y, desde la versión 8.0.18, el comando EXPLAIN ANALYZE ejecuta una instrucción y produce resultados EXPLAIN junto con el tiempo desde la ejecución.
La información útil sobre las consultas de MySQL ofrece acceso práctico al plan EXPLAIN.
¿Qué buscamos en los resultados?
Las variables de estado de la sesión se podrían usar para obtener detalles de ejecución de la consulta.
Primero, borra las variables de sesión, luego, ejecuta la consulta y examina los contadores. Por ejemplo, el estado Handler_* muestra el patrón de acceso a datos y la cantidad de filas. El estado Created_* mostraría si se crea una tabla temporal o una tabla temporal en el disco. El estado Sort_* mostraría el número de pases de combinación de ordenación y el número de filas ordenadas. En la documentación se explican más variables de sesión.
La declaración SHOW PROFILE proporciona el tiempo de ejecución de la consulta por fase de ejecución, que también podría ser información útil.
Una vez que comprendes el plan de ejecución de consultas, hay varias formas de influir y optimizarlo.
Para optimizar la configuración del servidor en determinadas consultas, te recomendamos que uses variables de sesión en lugar de cambiar el valor global que afecta a todas las sesiones.
Los valores de sesión más utilizados son los siguientes:
En resumen, para ajustar las consultas, hablamos de tres aspectos:
Empieza a crear en Google Cloud con 300 USD en crédito gratis y más de 20 productos Always Free.