Mejores prácticas para Databases for MySQL

Prácticas recomendadas
Práctica recomendada Notas
Ajuste el valor correcto para max_allowed_packet. En las configuraciones de replicación en las que las transacciones grandes o los binlogs superan el límite, la superación del tamaño de max_allowed_packet puede hacer que la réplica entre en un estado de copia fallida y provocar el riesgo de bloqueo del primario. El uso de columnas BLOB o VARTEXT para almacenar el contenido de archivos en columnas MySQL puede causar problemas con la replicación y restauración de copias de seguridad. Se recomienda configurar max_allowed_packet al valor máximo, si se cargan datos de longitudes variables en alguna columna. Además, no utilice varias columnas LONGBLOB anchas en una tabla específica, ya que esto puede dar lugar a situaciones en las que el tamaño de las filas supere el máximo permitido, y las restauraciones utilizando el punto en el tiempo pueden no funcionar.
Implementar claves primarias en tablas con grandes recuentos de filas. Añadir una clave primaria a cualquier tabla > 5K filas optimizará enormemente la replicación y evitará retrasos excesivos. Se recomienda definir una clave primaria para cualquier tabla en la que se realicen operaciones DELETE o UPDATE de más de 5K filas en sentencias únicas. Si no puede añadir una clave primaria, ELIMINE en lotes de < 5K filas, con commits por lote.
Favorezca DROP TABLE y TRUNCATE TABLE en lugar de DELETE de toda la tabla cuando sea posible. La replicación registra cada eliminación de filas, lo que puede ralentizar considerablemente el proceso. Se recomienda agrupar las eliminaciones y actualizaciones. Tenga en cuenta que DROP, CREATE y TRUNCATE son sentencias DDL y no se completan durante una copia de seguridad, sino que esperan a que finalice la operación de copia de seguridad. Las entradas de registro muestran mensajes de advertencia para el momento de la copia de seguridad en el que estas sentencias se bloquearán. Puedes estimar los tiempos de tus copias de seguridad inspeccionando el panel de disco utilizado del panel de monitorización. Como regla general, una copia de seguridad de 500 GB de datos tarda aproximadamente 90 minutos.
Minimice las operaciones de una sola sentencia con varias filas, como UPDATE JOIN o DELETE, utilizando cláusulas de rango WHERE para minimizar el recuento de filas tocadas. Esta práctica puede mejorar el rendimiento de las consultas y reducir la contención de bloqueos.
Utilice la agrupación de conexiones en el extremo de la aplicación. El pooling reutiliza las conexiones, evitando que se agoten. Asegúrate de que el tamaño de tu pool es muy inferior al de la base de datos max_connections. Implementar la lógica de reintento y captura de excepciones para manejar el agotamiento de la piscina o fallos de conexión.
Reduzca el radio de explosión utilizando una instancia ICD-MySQL dedicada por aplicación de producción. La separación de aplicaciones reduce el volumen por instancia de servicio, minimizando los problemas causados por la agregación de la demanda de muchas aplicaciones.
Despliegue una réplica de lectura MySQL por instancia MySQL. Las réplicas de lectura ofrecen la posibilidad de soportar tráfico de lectura fuera de la instancia principal, lo que reduce la carga de trabajo total y mejora la fiabilidad.
Alojamiento de MySQL en una instancia dedicada Para entornos de producción, especialmente aquellos que prevén un crecimiento, un aumento del tráfico o que requieren una alta fiabilidad y rendimiento, recomendamos encarecidamente alojar MySQL en una instancia dedicada. Esto garantiza un mejor aislamiento de los recursos, escalabilidad y estabilidad general del sistema.