Inicio Programación

SQL – Limitar Consumo Máximo de Memoria RAM a Microsoft SQL

7
Logo - Buscar un dato o campo en todas las tablas de la base de datos


Ultima Actualización del Artículo: May 29, 2017

Algunas veces podemos percatarnos del comportamiento de aumento de consumo de Memoria de MSSQL, el cual podemos llegar a pensar que SQL Server tiene algún defecto al consumir toda la Memoria RAM existente sin motivo aparente. Sin embargo, este es un comportamiento normal y no solo eso, si no que además esta gestión dinámica y automática de la memoria en SQL Server es la configuración recomendada.

¿Que puedo hacer si SQL Server consume mucha memoria RAM?

Es posible Limitar la Cantidad Máxima de Memoria RAM de consumo a una instancia de SQL Server, en entornos locales (Equipo de pruebas o Micro Empresas) donde se ejecuta MSSQL junto con otros servicios tales como Active Directory, MS Exchange,  etc. Podemos limitar el uso de memoria a una instancia de SQL Server para no comprometer los recursos de los demás servicios,

Por otro lado, en entornos empresariales, tratamos con servidores dedicados de base de datos, por lo cual esta configuración no tiene sentido alguno.

En otro sentido, no es recomendable compartir el servidor que ejecuta SQL Server  con otros servicios tales como los que mencionamos en un principio ya que se comprometen los recursos del mismo y podemos obtener resultados negativos en la estabilidad (aun con instancias SQL limitadas) de los servicios tanto de SQL como los demás que estemos ejecutando.

Si ya hemos decidido establecer un límite de Memoria RAM que puede consumir una instancia de SQL server, debemos proceder a realizar la configuración en el procedimiento almacenado sp_configure, en este pudiendo establecer el valor de las propiedades min server memory y max server memory, esta es una configuración avanzada, por lo que se debe habilitar previamente la configuración show advanced options, Estas configuraciones pueden realizarse sin reiniciar la instancia de SQL Server.

Ejemplo típico donde se acostumbra a Limitar la Cantidad Máxima de Memoria RAM a MSSQL

Tenemos un servidor el cual compartimos con varios servicios entre ellos SQL Server, donde al mismo tiempo en MSSQL tenemos múltiples instancias, el cual limitamos para evitar que cada instancia intente consumir toda la memoria, así evitando una conflicto de recursos entre estas.

Instrucciones para Limitar la Cantidad Máxima de Memoria Ram a MSSQL

1.- Abrimos SQL Server Management Studio Express.

2.- Abrimos los procedimientos anidados de nuestra base de datos y verificamos que este el procedimiento llamado sp_configure (Toda Base de Datos contiene uno predeterminado)

3.- Ya que verificamos que exista el procedimiento procedemos a abrir una ventana para escribir las instrucciones (New Query)

4.- Escribimos las siguientes instrucciones

Donde MiDB es el nombre de nuestra base de datos.

USE MiDB;
GO
EXEC sp_configure 'show advanced option', '1';

RECONFIGURE;
EXEC sp_configure;

Donde podemos ver los valores predeterminados.

5.- Procedemos a Limitar el Máximo de Memoria con las siguientes instrucciones.

Donde 1024 es el limite máximo en MB de consumo de RAM para nuestra base de datos MIDB

EXEC sp_configure 'max server memory (MB)', '1024';
GO

RECONFIGURE WITH OVERRIDE;
GO

 6.- Revisamos que los cambios se realicen con la siguiente instrucción.

EXEC sp_configure;

 7.- Si el campo config_value y run_value de  ‘max server memory (MB)’ son correctos, procedemos a ocultar la configuración avanzada si lo deseamos.

EXEC sp_configure 'show advanced options', '0';
GO

8.- Fin del procedimiento

COMPARTIR
Mi nombre es Fernando, soy analista de sistemas actualmente trabajo en una empresa con mas de 200 empleados que utilizan equipo de computo al cual se les da soporte en el departamento. Uno de mis pasatiempos fuera de la empresa es escribir artículos para PortalMasTips donde documento los problemas, inquietudes y detalles interesantes que se presentan.

7 Comentarios

  1. Ahhhhhhhhhhhhh Gracias El SQL me estaba comiendo crudos los recursos de memoria del server. Muchas Gracias!!! Funciona perfecto en mi sql server 2008

  2. Hola, gracias por el articulo, ha sido muy claro, sin embargo quisiera saber si es posible limitar la memoria del proceso de SQL si no tengo instalado SQL server management studio express, ya que una de las aplicaciones instaladas en mi servidor con Sistema Operativo Windows Server 2008R2 esta consumiendo los resursos de memoria RAM por causa de este proceso.

    Gracias por la colaboración

    • Buen dia

      Puedes hacerlo desde otro equipo que si lo tenga solamente te conectas a la instancia del servidor o con la aplicación que utilicen. También podrías escribir algún VBScript para ejecutar solo los querys, pero no podrías verificar lo demas para esto debes conocer los datos con XXX “Driver={SQL Server};Server=XXX;Database=XXX;uid=XXX;pwd=XXX” para realizarlo; esto ultimo no lo he realizado pero es una posibilidad, si no quieren instalar el SQL Management Studio en el servidor lo pueden instalar en cualquier equipo que se encuentre en la Red y de ahi realizar el proceso.

      Saludos.

  3. Estimado Fernando,

    Espero puedas ayudarme, soy DBA Jr en una empresa, un sistema usa Sql server 2012 en un server 2008 R2 , dicho server tiene 6GB de Ram y ya le limite a Sql Server el maximo de Ram en 4Gb sin embargo en el server veo que sigue consumiendo el servicio de sql server casi toda la Ram del server….Alguna sugerencia?…No se si deba purgar los Logs de las Bases de datos o alguna otra alternativa…
    Gracias de antemano,
    Saludos.

    • Buen dia Juan!

      Por defecto no se visualiza inmediatamente el limite de memoria; este lo realiza progresivamente. en SQL Server 2012 ya lo puedes hacer directamente en propiedades de la instancia.
      Clic derecho > Propiedades > Memoria en este encontraras los limites.

      No tengo nada redactado para optimizar una base de datos por el momento pero lo mas importante es que todas tus tablas esten indexadas o por lo menos las de mayor tamaño y uso, no soy experto en el tema pero este articulo de codeproject me ayudo hace tiempo.

      Saludos.

Deja un comentario...