es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no puede SQL Server 2019 container (implementado en Azure Container Instances) aceptar conexiones inmediatamente después de haberse iniciado?

Usando Docker Compose (y la integración de ACI), inicio servicios que se ejecutan en Azure Container Instances. Uno de los servicios es un contenedor Docker de SQL Server 2019. Lleva un momento poner en marcha los contenedores y hacerlos funcionar. Sin embargo, aunque el contenedor de SQL Server esté en estado de ejecución y el registro muestre que se ha iniciado correctamente, tarda bastante tiempo (unos minutos) en poder aceptar conexiones.

¿Alguien sabe por qué tarda tanto?

Así que, al intentar conectarme al servidor usando sqlcmd, sigo recibiendo la siguiente respuesta durante unos minutos después de que el servidor se haya iniciado:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server: Expiró el tiempo de espera de inicio de sesión.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server: Proveedor TCP: código de error 0x102.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server: Se ha producido un error relacionado con la red o específico de la instancia al establecer una conexión con SQL Server. No se encuentra el servidor o no es accesible. Compruebe si el nombre de la instancia es correcto y si SQL Server está configurado para permitir conexiones remotas. Para obtener más información, consulte SQL Server Books Online.

ACTUALIZACIÓN [22/12/2021]:

Me pregunto también por qué el comando “top” ejecutado desde dentro del contenedor de la base de datos muestra lo siguiente.
El proceso de mssql utiliza casi el 100% de la CPU. Sin embargo, el estado general de la CPU (por favor, vea la fila “%Cpu(s):”) muestra que la CPU está un 66% inactiva.
¿Alguien sabe por qué?

Imagen

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Posibles explicaciones de por qué el contenedor de SQL Server tarda unos minutos en aceptar conexiones podrían incluir:

    • Tiempo de inicialización: los contenedores de SQL Server requieren algo de tiempo para inicializarse y estar listos para aceptar conexiones, especialmente cuando se utilizan archivos de base de datos más grandes o configuraciones complejas. Aunque el contenedor parezca estar en ejecución, es posible que no esté completamente listo para aceptar conexiones hasta que ciertos procesos, servicios o scripts hayan terminado de ejecutarse.
    • Asignación de puertos: los contenedores de Docker pueden exponer puertos que se asignan a puertos en el host de Docker, pero estos puertos pueden no estar disponibles de inmediato para conexiones externas hasta que el contenedor esté completamente inicializado y se establezcan las asignaciones de red necesarias. Esto puede causar fallas o tiempos de espera en la conexión hasta que los puertos estén listos.
    • Latencia de red: las instancias de Azure Container se alojan en la nube, lo que significa que pueden tener cierta latencia de red o demoras al enrutar el tráfico entre el contenedor y los clientes externos. Esto puede empeorar si hay configuraciones de red específicas o reglas de firewall que limitan la conectividad.
    • Asignación de recursos: el contenedor de SQL Server puede requerir más recursos de los que la instancia de ACI está asignando actualmente, lo que hace que el contenedor se ejecute más lento o permanezca ocupado hasta que haya suficientes recursos disponibles. Esto puede reflejarse en el uso elevado de CPU u otras métricas mostradas en los registros o panel de control del contenedor.

    En relación con el alto uso de CPU del proceso mssql que se muestra en la salida del comando top, es posible que el proceso esté realizando algún procesamiento de datos pesado o consultas que requieren mucha potencia de CPU. Sin embargo, la utilización general de la CPU puede parecer más baja debido a otros procesos o tareas del sistema que también están utilizando los recursos de la CPU. También es posible que la carga del sistema no se distribuya de manera uniforme en todos los núcleos de la CPU, lo que podría explicar por qué uno de los núcleos parece estar completamente utilizado mientras que los demás están inactivos. Un análisis más detallado de los registros, métricas y asignación de recursos del contenedor podría proporcionar información adicional sobre la causa raíz de estos problemas.

Comments are closed.