¡Hola, chicos!
En este post me gustaría compartir con ustedes la solución a un problema que es bastante común y de vez en cuando aparece alguien en los grupos de Whatsapp y Telegram con este problema, que es la configuración incorrecta del parámetro Max Server Memory, poniendo un valor demasiado bajo y como consecuencia de esto ya no se puede conectar a la instancia:

Este tipo de problemas se dan mucho por confusión al especificar el tamaño y poner 128 MB pensando que son 128 GB, por ejemplo, o sobre todo por el valor 0 en la configuración de memoria máxima del servidor:

  • Si cambió la configuración a 0 usando la interfaz SSMS, ajustará automáticamente el tamaño máximo a 16 MB (SQL 2005-2008 R2), 64 MB (SQL 2012 de 32 bits) o 128 MB (SQL 2012+ de 64 bits)
  • Si cambió la configuración a 0 usando T-SQL (sp_configure), ajustará el tamaño máximo al predeterminado (2,147,483,647 MB ​​= 2 Petabytes)

Solución 1: iniciar SQL en modo mínimo

Hay varias formas de resolver este problema, como iniciar el binario de SQL Server a través de la línea de comando, pero me resulta más fácil cambiar el parámetro de inicio del servicio en el Administrador de configuración de SQL Server:

Si no encuentra el Administrador de configuración SQL en su servidor, simplemente abra el Menú Inicio > Ejecutar (WinKey + R) y escriba:

  • SQLServerManager10.msc (SQL Server 2008)
  • SQLServerManager11.msc (SQL Server 2012)
  • SQLServerManager12.msc (SQL Server 2014)
  • SQLServerManager13.msc (SQL Server 2016)
  • SQLServerManager14.msc (SQL Server 2017)
  • SQLServerManager15.msc (SQL Server 2019)

Ahora que se ha abierto el Administrador de configuración de SQL, ubique el servicio de SQL Server que tiene problemas y haga clic derecho en Propiedades:

En la pantalla que se abrió, seleccione la pestaña "Parámetros de inicio" y agregue el parámetro -f, que se utiliza para inicie SQL Server con la configuración mínima, que ignora algunas configuraciones de SQL Server y parámetros de memoria, tempdb se establece en el tamaño más pequeño posible, solo un usuario puede conectarse y CHECKPOINT no se ejecuta.

Después de agregar este parámetro, reinicie el servicio SQL Server:

Ahora abra el símbolo del sistema como administrador:

Utilice SQLCMD para conectarse a su instancia usando el comando "sqlcmd -S servidor\instancia" o "sqlcmd -S servidor, puerto"(Quiero aprender más sobre SQLCMD):

Si intenta conectarse a través de SSMS, encontrará el siguiente mensaje de error:

Error de inicio de sesión para el usuario "dirceu.resende". Motivo: el servidor está en modo de usuario único. Sólo un administrador puede conectarse en este momento. (Microsoft SQL Server, error: 18461)

Una vez que haya logrado conectarse a la instancia, ahora puede cambiar los parámetros de la memoria:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096; -- Altere para a quantidade desejada
GO
RECONFIGURE;
GO

Resultado:

Luego de lograr realizar el cambio, eliminamos el parámetro -f que agregamos y reiniciamos el servicio:

Después de reiniciar el servicio sin el parámetro -f, la instancia comenzó a funcionar normalmente nuevamente:

Solución 2: Conexión de administrador dedicada (DAC)

Otra forma (y aún más práctica) es utilizar la Conexión de administrador dedicada, también conocida como DAC, que es una conexión especial para resolver problemas en los que ya no es posible iniciar sesión, ya sea una configuración de memoria muy baja, un activador de inicio de sesión que impide los inicios de sesión, etc. De forma predeterminada, la conexión DAC remoto está deshabilitado, por lo que deberá habilitar la conexión DAC remota o deberá iniciar sesión en el servidor para poder utilizarla (DAC local).

Para conocer más sobre la conexión DAC y cómo habilitar el uso de esta conexión de forma remota, acceda al artículo Habilitación y uso de una conexión de administrador remoto (DAC) dedicada en SQL Server y también el artículo SQL Server: cómo conectarse mediante la conexión DAC (conexión de administrador dedicada) sin el navegador SQL.

Para conectarse a la instancia bloqueada usando DAC a través de SQLCMD, simplemente agregue el parámetro -A:

En las pruebas que realicé con poca memoria (128 MB), el servicio SQL no pudo permanecer en línea ni siquiera 10 segundos y se detuvo. Entonces cargué el servicio e inmediatamente utilicé la conexión DAC para cambiar la configuración de la memoria:

net start "SQL Server (SQL2017)"
sqlcmd -S localhost\sql2017 -A -Q "EXEC sys.sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sys.sp_configure 'max server memory', 4096; RECONFIGURE;"

Observación: En muchos intentos, aunque ejecuté los comandos rápidamente, SQL no pudo abrir la conexión y el servicio se detuvo, incluso la conexión DAC y por lo tanto, creo que la solución 1 es más efectiva.

Espero que hayas disfrutado de este rápido consejo y que pueda ser útil en tu vida diaria.
¡Un abrazo y hasta luego!