SQL y los switch 3GB UserVA PAE AWE
Por Luis Ramirez
He visto muchos casos con problemas de desempeño por causa de un mal entendido de cómo emplear estos switch de configuración, razón por la cual decidí escribir este Blog.
Para empezar vamos a aclarar que es Memoria Virtual y Memoria física.
Memoria Virtual vendría siendo una técnica utilizada para sacar provecho y dar la impresión a CADA aplicación que se viene trabajando con memoria continua. La memoria virtual se basa en lo que es un direccionamiento de espacio lineal llamado Virtual Address Space (VAS)
Memoria Física, sería el área en donde VAS estará apuntando y entre mas memoria física se tendría una mayor área para trabajo y por lo tanto menos acceso a disco (mejorando desempeño).
En un ambiente de 32 bits por diseño de ARQUITECTURA se tiene un límite del direccionamiento virtual de 4 GB (No confundir con memoria FISICA). No importa si tienes 512 MB o 8 GB FISICOS, Windows se encargara de emular esto para cada aplicación. Ahora de estos 4 GB virtuales se dividirán en dos para modo usuario (aplicación) y dos para el kernel (sistema operativo)
/3GB
Lo que hace este switch es incrementar el área de direccionamiento virtual (VAS) a 3 GB en modo usuario y decrementar a 1 GB el kernel, esto es recomendado en casos donde se tenga solo una aplicación corriendo y esta no tenga mucha interacción con el sistema operativo, de lo contrario el servidor tendrá un comportamiento extremadamente lento para responder.
/Userva
Es parecido al 3GB pero aquí podemos manualmente configurar el rango entre 2048 y 3072
/PAE
PAE nos permite direccionar fuera del límite de los 4GB. Digamos que si tienes 8 GB físicos, para poder acceder/direccionar entre 4 y 8 tendrías que tener esta opción habilitada en el sistema operativo. Algo importante a notar es que cada sistema operativo y/o hardware tiene una limitación de cuanto soporta.
Estas opciones las puedes encontrar en Windows 2003 bajo boot.ini, en Vista y versiones posteriores bajo BCDEdit.
AWE
Address Windowing Extentions (AWE) es una funcionalidad para indicarle a una aplicación (como SQL Server) que se puede direccionar VAS mas allá de los 4 GB , esto es, si el SISTEMA OPERATIVO reconoce dicha memoria (con la opción PAE) y la aplicación fue compilada para soportar esto.
Es importante asignarle la política local “LOCK PAGES IN MEMORY” a la cuenta corriendo el Servicio si habilitas esta opción.
En ambientes de x64 BITS el VAS es de 8TB y 7TB en IA64, PAE y 3GB son ignorados.
Escenarios que pueden existir
Windows 2003 32 bits corriendo en un procesador de 64 bits
- El VAS de modo usuario será de 2 GB
- AE esta habilitado por default.
- 3GB se pude habilitar pero NO es recomendado.
- AWE seria necesario para manipular mas alla de los 4GB.
Windows 2003 64 bits corriendo aplicación de 32 bits
- el VAS de modo usuario será de 8 TB
- PAE es ignorado
- 3GB es ignorado
- Aplicación puede usar mas de 2 GB si se habilita AWE.
Windows 2003 32 bits corriendo aplicación de 32 bits con 8 GB de memoria, la opción 3GB y AWE habilitado
El sistema operativo asignara 3GB al modo usuario (aplicación) y 1 GB al sistema operativo, no utilizando el resto.
Escenarios que pueden existir en SQL Server
SQL Server de 32 bits corriendo en 32 bits
- VAS será de 4GB.
- PAE puede ser habilitado si el servidor tiene mas de 4 GB y por lo tanto habilitar AWE y “Lock pages in Memory”
- No recomendamos usar 3GB.
SQL Server de 32 bits corriendo en 64 bits
- VAS es de 8TB
- PAE y 3GB son ignorados.
- Habilitar AWE si se usara mas de 4GB.
- “Lock Pages in Memory” deberá ser configurado si se habilita AWE.
SQL Server de 64 bits corriendo en 64 bits
- VAS es de 8TB
- PAE, 3GB y AWE son ignorados.
- Habilitar “Lock Pages in Memory”
En cuestión de SQL Server para hacer uso de más VAS es recomendado
- Tener la opción de /PAE habilitada
- Tener al menos la última versión de actualización de SQL Server.
- Habilitar Address Windowing Extentions (AWE)
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'awe enabled', 1
RECONFIGURE
GO
Al configurar MAX Server Memory considera dejar 2 GB FISICOS para el sistema operativo y dejar mas memoria por cada instancia corriendo de manera tal que no se saturen.
Por ejemplo, si tienes un servidor con una instancia, 8BG físicos puedes poner a SQL con 6GB (si es que no está corriendo otros servicios)
sp_configure 'max server memory', 6144
RECONFIGURE
GO
Mayor Información
- Memory Limits for Windows Releases
- Physical Address Extension
- Memory Support and Windows Operating Systems
- Enabling AWE Memory for SQL Server
- How to configure SQL Server to use more than 2 GB of physical memory
- SQL Server only uses 2 GB of memory even though the AWE option is enabled
- How to use the /userva switch with the /3GB switch to tune the User-mode space to a value between 2 GB and 3 GB
- Monitoring Memory Usage (2000)
- Monitoring Memory Usage (2008)
- SQL Server memory related performance counters
- Effects of min and max server memory
- AWE enabled Option