Severe Performance Drop After Migrating MySQL to Azure Cloud – Seeking Tuning or Security Insight

Ramiro Larenas 40 Puntos de reputación
2025-04-24T21:23:45.7033333+00:00

We are assisting a customer with migrating their legacy infrastructure from DigitalOcean to Azure. As part of this migration, we've made changes to improve both security and stability—specifically, we’ve moved from a monolithic setup, where the database was hosted on the same server as the application, to using Azure’s MySQL Cloud service.

However, we’re encountering a significant performance issue. Processes that previously completed in seconds are now taking up to 100 times longer to run. We are seeking support to identify whether this degradation is due to required database tuning or if there are security configurations or limitations in Azure that may be impacting performance.

{count} votos

Respuesta aceptada
  1. PratikLad 1,125 Puntos de reputación Personal externo de Microsoft Moderator
    2025-04-30T11:38:33.5133333+00:00

    Hola Ramiro Larenas

    Hay múltiples razones por las que el rendimiento puede degradarse después de la migración a Azure Database for MySQL:

    • Latencia de red: Como se ha cambiado de una arquitectura monolítica a una distribuida, las consultas que antes se ejecutaban de manera local ahora deben viajar a través de la red, lo que puede causar latencia. Para solucionarlo, asegúrate de que tanto la aplicación como la base de datos estén en la misma región de Azure y en la misma Red Virtual (VNet) para minimizar la latencia.
    • Conexiones SSL obligatorias: Azure Database for MySQL requiere conexiones SSL por defecto, lo que conlleva una sobrecarga con cada conexión. Puedes usar un mecanismo de agrupación de conexiones que solo requiera el protocolo SSL inicial para optimizar y reducir la sobrecarga de creación de conexiones SSL.

    Las consultas que no están optimizadas pueden tener un impacto significativo en el rendimiento cuando se ejecutan en un entorno distribuido. Además, los índices podrían faltar después de la migración, lo que puede causar exploraciones completas de tablas, provocando tiempos de respuesta degradados. Usa la herramienta EXPLAIN para analizar las consultas y sus planes de ejecución y optimizarlas según sea necesario. También verifica si es necesario agregar nuevos índices en consultas que se ejecuten frecuentemente para que tengan un rendimiento óptimo.

    Asegúrate de que la configuración actual del servidor pueda manejar la carga de trabajo, especialmente si provienes de un entorno con recursos dedicados.

    Pasos para configurar la máquina para conectarse mediante IP privada al servicio Azure Database for MySQL Flexible Server (Private Access y métodos similares):

    Como el servidor está en una red virtual, solo puedes conectarte desde otros servicios de Azure que estén en la misma red virtual que el servidor. Para conectarte y administrar el servidor, la máquina virtual debe estar creada en la misma región y la misma suscripción. Se puede utilizar una máquina virtual Linux como túnel SSH para administrar tu servidor de base de datos.

    Conectarse a la máquina virtual mediante SSH

    Abre un terminal Bash o PowerShell y ejecuta el siguiente comando para conectarte a tu VM. Asegúrate de reemplazar:

    • 10.111.12.123 con la dirección IP pública de tu máquina virtual.
    • .\Downloads\myKey1.pem con la ruta correcta al archivo .pem de tu clave.
    
    ssh -i .\Downloads\myKey1.pem azureuser@10.111.12.123
    
    

    Instalar el cliente MySQL en la máquina virtual

    Para interactuar con tu servidor MySQL en Azure, instala el cliente MySQL en tu máquina virtual:

    
    sudo apt-get update
    
    sudo apt-get install mysql-client
    
    

    Descargar el certificado SSL

    Azure exige SSL para conexiones MySQL. Descarga el certificado raíz de DigiCert:

    
    wget --no-check-certificate https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
    
    

    Conectarse al servidor MySQL de Azure

    Una vez que el cliente y el certificado estén listos, conéctate de forma segura usando:

    
    mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p \
    
      --ssl-mode=REQUIRED \
    
      --ssl-ca=DigiCertGlobalRootCA.crt.pem
    
    

    Para más información, consulta: Conexión a Azure Database for MySQL - Flexible Server con el método de acceso privado.


1 respuesta adicional

Ordenar por: Muy útil
  1. Ramiro Larenas 40 Puntos de reputación
    2025-04-28T20:13:38.26+00:00

    Hola Adithya,

    Primero que todo, muchas gracias por tu detallada respuesta. La información que me proporcionaste ha sido de gran ayuda para entender mejor los factores que podrían estar afectando el rendimiento.

    Como próximo paso, para poder descartar que la degradación del rendimiento esté relacionada a la red pública o a temas de latencia/seguridad (por ejemplo SSL overhead), nos gustaría realizar un laboratorio de conexión directa desde una máquina virtual (VM) en Azure, conectada a la misma red virtual (VNet) que el servidor de base de datos Azure MySQL Flexible Server (usando Private Endpoint o VNet Integration).

    Por favor, ¿podrían apoyarnos o guiarnos paso a paso en el siguiente escenario?:

    Crear una máquina virtual (Linux) en Azure en la misma VNet o en una VNet emparejada correctamente configurada. (Nota: La máquiba ya está creada y funcionando)

    Nos indiques los próximos pasos para configurar la máquina para conectarse vía IP privada al servicio Azure Database for MySQL Flexible Server (Private Access y/o similar).

    Validar la conectividad de bajo nivel (ping, telnet, etc.) hacia el puerto de MySQL (3306).

    Realizar algunas pruebas de ejecución de queries para comparar latencias y tiempos de respuesta contra la conexión pública.

    Muchas gracias nuevamente por su apoyo.

    Saludos,

    Ramiro Larenas

    0 comentarios No hay comentarios

Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.