post icon

Optimizar la Memoria RAM en SQL Server de 32 y 64 bits [SQL Tunning]

Ya es sabido por todos que los sistemas operativos con arquitectura de 32bits, puede sólo utilizar poco más de 3GB de RAM lo que hace un poco frustrante la experiencia cuando tienes un servidor con mucha memoria RAM y no la puedes usar toda.

Imagina tener instalado 128 GB de RAM y no puedas utilizar practicamente 124GB por culpa de la arquitectura de 32bits. Tambien podría pasar esto si el Windows es de 64bits pero SQL Server sólo de 32bits.

Para aprovechar toda la RAM vamos a configurar el servidor de manera que lo aproveche. Ésta configuración también es válida para arquitecturas de 64bits, no porque no puedan usar toda la RAM, sino porque hasta hoy día es la única manera de forzar que un proceso, aplicación o servicio en Windows a que utilice toda la memoria física posible antes que la virtual. Normalmente SQL Server utiliza una gran cantidad de memoria física pero cuando el buffer (en  la páginación de datos) comienza a oscilar entre los 2 y 3 GB (dependiendo de la configuración) se empieza a valer de la memoria virtual, en el disco duro. Lo que significa que los procesos “LAZY WRITTER“, “LOG WRITTER” y “CHECKPOINT” empezaran a ralentizar el servicio (su uso lo pueden ver con sp_who2), e incluso las querys que ejecutamos sobre las BD.

La primer configuración la debemos hacer sobre el sistema operativo:

  1. Abrimos la ventana de ejecutar (WIN+R) y escribimos gpedit.msc para abrir las Directivas de Grupo.
  2. Expandir Configuración del Equipo –> Configuración de Windows –> Configuración de Seguridad –> Directivas Locales.
  3. Seleccionar Asignación de derechos de usuario y podrán ver en el detalle las directivas disponibles.
  4. Dentro del detalle abrir (con doble clic) la opción Bloqueo de páginas de memoria.
  5. Se abrirá la ventana Configuración de la directiva de seguridad local, das clic en Agregar.
  6. Y luego agregue las cuentas o grupos con privilegios para ejecutar sqlservr.exe. Depende como configuraste tu servidor esto variaría, pero las más comunes suelen ser “Administrador“, “Administradores“, “Servicio de red“, “Servicio local“, etc.
La segunda parte de la configuración ya la tenemos que hacer desde SQL Server, abrimos una ventana de consultas desde SQL Server Management Studio y ejutamos lo siguiente:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

sp_configure 'awe enabled', 1;
RECONFIGURE WITH OVERRIDE;
GO

Ahora lo más importante es configurar una limitación para SQL Server, por ejemplo si tenemos 8GB de RAM podríamos limitarle a 6GB y dejar los restantes para el sistema operativo y otros menesteres, ya que si el valor del MAX Memory es superior a la memoria física instalada, SQL Server reservará toda para sí y solo dejará 128 o 256 MB para el sistema operativo (dependiendo de cual está instalado).

sp_configure 'min server memory', 1024;
RECONFIGURE;
GO

sp_configure 'max server memory', 6144;
RECONFIGURE;
GO

Para comprobar que realmente está corriendo la nueva configuración ejecutamos lo siguiente, y el valor run_value debe estar en 1

sp_configure 'awe enabled';
GO

En algunos casos al realizar esto el SQL Agent podría llegar a deshabilitarse, si lo necesitan solo vuelvan a habilitarlo

sp_configure 'Agent XPs', 1;
RECONFIGURE WITH OVERRIDE;
GO

Ahora solo que reiniciar el servicio y probar como corre todo.

Una vez que todo esté configurado y la BD ya en producción ocurrirá algo que parecerá extraño, en el Administrador de Tareas, veremos en el gráfico de consumo de RAM una buena cantidad consumida (si no es toda la cantidad asignada a SQL Server) pero al entrar en el detalle por procesos, verán que sqlservr.exe apenas consumirá una par de cientos de megas (entre 200 y 2500MB aproximadamente).

Para ver el consumo del AWE podemos ejecutar la siguiente query:

DBCC memorystatus

Otro dato muy importante a tener en cuenta, es que si tienen más de 16 GB de RAM instalados, deben revisar el archivo Boot.ini y asegurarse que el parámetro /3gb no esté en el fichero para que el sistema operativo pueda utilizar más de 16GB de memoria física.

Comentarios desde Facebook:

  1. avatar
    Maritus Mozilla Firefox Windows
    22 julio 2012 at 21:43 #

    Excelente tutorial.,muchas gracias..!!:-D:-D

Responder