Min y Max de memoria


La memoria para SQL Server es su recurso principal, debido a la manera en que SQL Server se maneja si no se establece un límite usara toda la memoria disponible, y esto puede causar presión de memoria en el sistema.

Uno de los problemas presentes más importantes a arreglar es el hecho de que poner un límite a la memoria que puede tomar SQL Server, esto se ve en las opciones de la instancia como el “Max Memory”, en la mayoría de los blogs se encontraran el hecho de que recomiendan un 20% de la memoria para el sistema operativo y un 80% a SQL Server en un servidor dedicado a SQL Server.

Ahora esto depende de varias cuestiones, una de ellas es cuantas instancias se tienen instaladas, ya que cada instancia debe de tener su máxima configuración determinada para poder tener un control más preciso, otro punto a tomar en cuenta es cuál es la versión de SQL Server que tenemos, debido a que el manejo de la memoria en SQL Server fue cambiado a partir de la versión 2012.

2012 y 2014

Todo el manejo de memoria es controlado por el Max Memory (bueno no todo pero la gran mayoría de sus funciones)

2008 R2 y anteriores

Solo el heap de memoria de SQL Server es controlado por el Max Memory y cuestiones como el CLR están fuera del control de Max Memory.

Ahora veamos el punto de 20% de memoria para el sistema operativo, digámonos de la siguiente manera, usando como base con SQL Server 2012 para evitar problemas, si tuviéramos un servidor que va a ser transaccional con 10,000 registros por hora y bases de 100GB posiblemente usaríamos un servidor con un total de 16GB y pondríamos unos 13GB para SQL Server y el resto a Windows, pero ahora pensemos en el servidor de un Banco que controla todas las transacciones de sus tarjeta habientes y que tiene 2tb de memoria, acaso separaremos 400GB para este servidor?  Es obvio que tenemos que perfilar y aunque tengamos un máximo dispuesto vigilar el comportamiento del mismo.

Sobre el comportamiento del RAM, y porque SQL Server consume todo el RAM, es que SQL Server una vez que consume RAM lo manda a su heap y no lo devuelve al sistema operativo este RAM sino que SQL Server lo administra el mismo principalmente porque el acceso a RAM siempre sera mucho más rápido que el acceso a disco, si una transacción puede ser utilizada es preferible tenerla en RAM que ir por ella nuevamente al storage, entonces en la noche por citar un ejemplo en el que no hay carga es posible que libere casi todo el RAM pero el sistema seguirá viendo una ocupación del 100% de RAM.

Esto a grandes rasgos el funcionamiento del RAM dejo un enlace donde explican más a fondo el cambio que hubo sobre el manejo de memoria en 2012.

Más información:

http://blogs.msdn.com/b/sqlosteam/archive/2012/07/12/memory-manager-configuration-changes-in-sql-server-2012.aspx

Este documento tiene más información de como determinar el máximo de memoria de una manera precisa.

http://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/

Comentarios