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

By | febrero 4, 2014

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

Content Protection by DMCA.com

7 thoughts on “SQL – Limitar Consumo Máximo de Memoria RAM a Microsoft SQL

  1. Portal+Tips Post author

    Nos da gusto que te fuera de utilidad la información, a nosotros tambien nos funciono excelente cuando compartíamos SQL con otros servicios.

    Reply
  2. roman Post author

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

    Reply
  3. Portal+Tips Post author

    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.

    Reply
  4. Juan Post author

    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.

    Reply
  5. Portal+Tips Post author

    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.

    Reply
  6. Sergio Posada Post author

    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

    Reply

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *