Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img
20 de Febrero, 2011 · Memoria

Tomo I. Memoria RAM. Optimización de sistemas de 32 y 64 bits. SQL Server 2008.

La memoria es el área donde más probable se tenga un problema. Hay problemas de memoria que pueden ser causa de saturación de disco y de CPU. Intentare orientar para que se saque el mayor provecho de la memoria.

 1.Optimización de sistemas de 32 bits

 En esta sección se analiza las diferentes formas que puede configura Windows de 32 bits para utilizar más de 4GB de RAM y que el proceso de SQL Server pueda utilizar más de de 2GB, junto con los beneficios y inevitables efectos secundarios que son muy a menudo pasados por alto. Esta sección sólo es aplicable a Sistemas de 32 bits.


 1.1. /3GB y increaseUserVA
 La primera técnica que se puede emplear para que el proceso de SQL Server aumente el espacio de direcciones de memoria a 3 GB es, mediante el modificador /3GB.


 /3GB se debe agregar en el arranque del sistema operativo, concretamente en el fichero boot.ini, si se está ejecutando Windows Server 2003 o W2000. Para realizar la operación equivalente en Windows Server 2008, es necesario modificar la configuración del arranque del sistema, con BCDEdit desde el símbolo del sistema:

Bcdedit / set increaseUserVA 3072


Mas adelante se comentará los parametos
"/PAE y /3GB /" juntos.

 Una vez que se agrega /3GB y reiniciar el sistema, cada proceso tendrá 3GB de direccionamiento de espacio en memoria en lugar de 2 GB.

Lecturas aconsejadas:
 How to Set the /3GB Startup Switch in Windows.
http://msdn.microsoft.com/en-us/library/bb124810(v=exchg.65).aspx
 /3gb. http://msdn.microsoft.com/en-us/library/ff556232.aspx

 BCDEdit /set.
http://msdn.microsoft.com/en-us/library/ff542202.aspx

 

 1.1.1.Free System Page Table Entries

 Dentro del Performance Objet: "Memory", podemos encontrar el contador: "Free System Page Table Entries". Microsoft recomienda que este valor debe ser por lo menos 24 mil en el arranque y nunca debe bajar a menos de 10.000 o se le considera "En riesgo" de que se agote.

 Para gestionar correctamente la memoria virtual y la memoria física. Cualquier reducción del tamaño de Free System Page Table Entries, afectará a la cantidad de RAM que podrá gestionar su equipo.


 A modo de ejemplo, en un servidor con Windows Server 2003 con 4 GB de RAM, el Free System Page Table Entries es de 180.234, (muy por encima del mínimo necesario de 10.000). Después de añadir /3GB este se reduce a 26.417, que es una caída significativa, pero suficiente para satisfacer la recomendación, y ahora la instancia de SQL Server puede utilizar 3 GB de memoria física.

 Lecturas aconsejadas:
 Free Page Table entries is at the warning threshold.
http://technet.microsoft.com/en-us/library/aa996240(EXCHG.80).aspx

 

 1.2. /PAE
Intel presentó una tecnología llamada Physical Address Extension (PAE), que aumenta con eficacia el bus de direcciones de 36 bits y permite el acceso a hasta 128 GB de RAM, dependiendo de su sistema operativo.


 La edición estándar de Windows sólo admite hasta 4 GB de RAM, por lo que PAE está disponible sólo en el Enterprise y Datacenter Edition. Se habilita en la misma forma que /3GB: agregando el modificador /PAE en el boot.ini o BCD, dependiendo de qué sistema operativo se está ejecutando.



 "Si está ejecutando Windows Server 2003 Service Pack 1 o posterior, Windows se ejecuta automáticamente en el modo PAE. Si la BIOS del servidor soporta añadir memoria en caliente, (módulos de memoria RAM adicionales) entonces Windows hará posible disfrutará de esta característica: "añadir memoria en caliente"."

 "DEP (Data Execution Prevention), es una característica de seguridad forzada por el hardware y Windows, evita que las aplicaciones ejecuten código en zonas no destinadas a ejecuciones de memoria, lo que ayuda a que no se produzcan buffer overflow en zonas protegidas de memoria, gracias a que Windows cambia automáticamente el modo PAE si la tecnología está habilitado en el BIOS. "


 Es muy probable que PAE esté habilitado automáticamente en su servidor sin la presencia de /PAE en el boot.ini o BCD.

 De esta forma (/PAE) Windows puede gestionar hasta 128 GB de memoria RAM en un servidor. Para que aplicaciones como SQL Server utilicen la memoria adicional proporcionada por PAE.

 Lecturas aconsejadas:
 /PAE. http://support.microsoft.com/kb/283037

 

 1.3. Address Windowing Extensions (AWE)


 AWE es un API de Windows que permite a un sistema de 32 bits, reservar un mayor número de direcciones virtuales de memoria, asignadas a un rango físico de memoria para Windows. Este diseño asegura que toda la memoria asignada mediante las API (AWE), no se puede compartir con cualquier otro proceso y es un modo de memoria no paginable.

 Para que SQL Server pueda utilizar AWE, necesita habilitar AWE utilizando sp_configure o "selecciondo la casilla en las propiedades del servidor, de "usar AWE para asignar memoria" (Sql Server Management Studio)".

sp_configure 'show advanced options', 1

RECONFIGURE

GO

sp_configure 'awe enabled', 1

RECONFIGURE

GO

Lectura recomendada: (http://msdn.microsoft.com/es-es/library/ms190673.aspx)


Una vez activada, la próxima vez que se inicia SQL Server intentará bloquear páginas de memoria para que pueda utilizar AWE.


 Para bloquear páginas de memoria, el proceso de SQL Server necesita privilegios de "Lock Pages in Memory", en Local Security Setting, para la cuenta del servicio de SQL Server.


 Si se habilita AWE y no han concedido el privilegio derecho a la cuenta de servicio, podemos encontrar el mensaje:


"Address Windowng Extensions (AWE) requires the "lock pags in memory" privilege which not currently present in the access token of the process."

 En Windows Server 2003 y Windows Server 2008, la memoria AWE, esta asignada dinámicamente por SQL Server de la misma forma que las asignaciones de memoria normal.

 Memoria AWE todavía no es la solución perfecta para trabajar con grandes cantidades de RAM, El mayor inconveniente para SQL Server, es que la RAM adicional (AWE), sólo puede ser utilizada para la caché de datos, por lo que no pueden ayudar directamente si su SQL Server está luchando para apoyar a los usuarios adicionales, tales como bases de datos, consultas, bloqueos, u otros consumidores de de memoria en SQL Server que tiene que ejecutar en la memoria no AWE. 

 Lecturas aconsejadas:
 AWE. http://msdn.microsoft.com/en-us/library/ms175581.aspx
 AWE enabled. http://technet.microsoft.com/es-es/library/ms190731.aspx

  

 1.4 /PAE + /3GB (combinados)

  Según las directrices oficiales de Microsoft, el /PAE y /3GB conjuntos no es recomendado. Ya que el uso de ambas tecnologías pueden causar problemas, si no disponemos de memoria RAM suficiente para soportar los dos indicadores, debido a los consiguientes cambios que afectan al área clave que dependen del espacio de direcciones de memoria, (Paged Pool y Nonpaged Pool).

 Si no disponemos de memoria suficiente, la suma de los indicadores /PAE y /3GB, puede reducir la cantidad mínima de espacio necesario (entorno a 1GB), para direcciones de memoria en modo kernel. Por lo que debemos revisar el Performance; Objet: "Memory", "Free System Page Table Entries". Donde Microsoft recomienda que su valor debe ser superior de 10.000.

 Vamos a exponer unas tablas, que muestra los valores de estos (/PAE, /3GB, PTE-disponible) componentes cuando se ejecuta con diferentes cantidades de memoria RAM en:

SYSTEM RAM

Paged MAX

Paged MAX

Free system PTEs

8GB

160MB

131MB

13.653

12GB

160MB

131MB

6.500

16GB

160MB

131MB

2.000

 

 Podemos ver por que Microsoft no lo recomienda. Ya que Free System Page Table Entries puede ser inferior de los recomendado.

 Hay un nuevo modificador que se hizo para Windows Server 2003 llamado /USERVA, para aliviar un poco la presión sobre los sistemas de PTE. El uso de este parámetro en combinación con /3GB permite especificar una cantidad ligeramente inferior (de MB) para el espacio reservado de usuario de 3GB, con lo que es posible dejar el espacio para el modo kernel (entorno a 1GB) y un poco más de PTE del sistema, según sea necesario.


 Microsoft recomienda probar un valor predeterminado de 3030, pero los valores entre 2970 y 3030 son compatibles
(los valores están en MB). 3072 es el equivalente de /3 GB sin /USERVA.

 Muestro una tabla, con los valores recomendados (/USERVA): "Marcamos los recomendados"

 

16GB RAM

12GB RAM

8GB RAM

USERVA=3030

12200

17200

24500

USERVA=3000

20000

25000

32100

USERVA=2970

27400

32600

39900

 

 El parámetro /Userva se recomienda valores establecidos entre 2970 MB y 3030 MB. No se aconseja valores inferiores a 2970 MB ni superiores a 3030 MB. Sólo debe utilizarse un valor inferior a 2970 MB en aquellos casos en que haya una PTE extremadamente baja. El valor predeterminado recomendado es 3030 MB.

 Lectura recomendada: http://support.microsoft.com/kb/810371


 Pasando a la versión x64 de Windows elimina todos estos problemas con Paged Pool y Nonpaged Pool y PTE.

 Windows Server 2008
E n Windows Server 2008, / 3GB y USERVA / se han combinado en una sola configuración llamada increaseUserVA, el cual se modifica utilizando BCDEDIT.
Correr bcdedit / set increaseUserVA 3072 es el equivalente a usar / 3GB en Windows Server.

Y correr bcdedit /set pae ForceEnable  es el equivalente a usar /PAE en Windows Server.

 Lectura recomendada: http://msdn.microsoft.com/en-us/library/aa366796(v=vs.85).aspx

 

 1.5 MemToLeave, or ReservedMemory

  En maquinas de 32 bits, ReservedMemory, es una parte del espacio de direcciones de Memoria de SQL Server reserva antes de que SQL Server comience a asignar y liberar zonas dentro de su búfer (entrada y salida de memoria). Es también conocida como MemToLeave (MTL), ya que era el nombre de una variable interna que hace referencia a la cantidad de memoria de salida. Aunque la documentación oficial de Microsoft utilice el término ReservedMemory.


 Cuando se inicia el servicio SQL Server, reserva una sección de memoria virtual (ReservedMemory) antes de que se reserve la zona de memoria para el búfer, y a continuación ha de dejar reservado algo de espacio libre para el VAS (zona que reserva y confirma la memoria que utilizanda las funciones de Windows VirtualAlloc).


 VirtualAlloc, VirtualAllocEx y VirtualAllocExNuma son funciones de bajo nivel de Windows que utilizan las aplicaciones para reservar y confirmar espacio de direcciones virtuales que necesitan los procesos.


No hay MemToLeave en SQL Server de 64 bits, MemToLeave es sólo una parte de el proceso de inicio de SQL Server de 32 bits. Debido a que el espacio de direcciones virtuales son tan grandes en SQL Server de 64 bits que no es necesario reservar direcciones fuera de los rangos destinados a almacenamientos intermedios.


 Memory_to_reserve puede ser útil cuando si tiene más memoria física que el espacio de direcciones virtuales de aplicaciones (2-3GB según en la confi guración) y estarán viendo los mensajes en el registro de errores: ""Failed Virtual Allocate Bytes". Esto normalmente indica que SQL Server no tiene espacio VAS suficiente para que las asignaciones que se deben hacer fuera del grupo de búfer de memorea.

 

  

 2. Optimización de sistemas de 64 bits


 Migrar a un sistema de 64 bits resuelve muchos de los problemas de memoria relacionados con la plataforma de 32 bits. Sin embargo, los entornos de 64 bits traen nuevos problemas que debe tenerse en cuenta, además de conocer cómo y cuándo evitarlos.


 2.1 AWE en sistemas de 64 bits


 En sistemas de 64 bits, AWE en SQL Server, se utiliza como una solución para un problema que puede ocurrir entre la gestión de memoria en Windows y SQL Server, sobre todo en Windows Server 2003 y versiones inferiores.

 En ocasiones el administrador interno de memoria, se recorte el espacio de memoria, para reflejar el uso de memoria física de un proceso, de todas las aplicaciones que se ejecutan en el servidor. Y puede reflejar aparentemente que no hay suficiente memoria física libre en Windows para atender una solicitud de recursos de un proceso o una aplicación. Esto es un comportamiento normal y debería ser trasparente para el sistema.

 Sin embargo, si se produce una solicitud de memoria contigua, el administrador interno de memoria obligará a todas las aplicaciones a vaciar parte de sus zonas de memoria que no estén en uso (incluso las zonas de SQL no utilizadas). Esto se conoce como, "aggressive working set trimming", y puede repercutir en el rendimiento de SQL Server. En SQL Server 2005 Service Pack 2, Microsoft ha añadido un nuevo mensaje de error para poder ver cuando se produce este comportaiento.


 Aquí ponemos un ejemplo:
"2009-02-01 21:25:10.14 spid1s A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 1086400, committed (KB): 2160928, memory utilization: 50%."


 El resultado puede ser grave, ya que puede hacer pasar a SQL Server, de decenas de GB a unos pocos cientos de MB, en apenas unos segundos.

 Resolver este problema, abordaremos una combinación de distintos métodos:


En primer lugar, comprobar si existen actualizaciones para todos sus controladores de dispositivos. Si el problema fue causado por un dispositivo controlador, pueden haber correjidos esos problemas en una versión posterior.


A continuación, ajuste de memoria máxima del servidor de SQL Server para asegurarse de que Windows y otros procesos pueden ejecutarse en el servidor y tienen suficiente memoria física para llevar a cabo su trabajo sin pedir a SQL Server liberar memoria.


Por último, si todavía estás viendo el problema (o si sus efectos son tan graves que no quieren arriesgarse a que pasen otra vez), puede configurar SQL Server para utilizar AWE.


 En el apartado de AWE en " sistemas de 32 bits" puede leer que es utilizado para acceder a la memoria por encima de la limitación de proceso de 32 bits. También bloquea las páginas en la memoria para hacer las asignaciones más rápido, y es este aspecto donde un servidor SQL Server de 64 bits puede aprovecharse.

 Las opciones de AWE en sp_configure y SQL Server Management Studio se ignoran cuando se está sobre 64 bits, pero si está ejecutando la versión Enterprise Edition y otorga a la cuenta del servicio de SQL Server privilegio en "Lock Pages in Memory", en Local Security Setting, SQL Server utilizará la API de AWE para asignar la memoria. Microsoft a adido esta modularidad en los sistemas SQL Server 2005 Standard Edition de 64 bits y en los sistemas SQL Server 2008 Standard Edition de 64 bits en el SP3 y posterior de SQL Server 2005 S. E. y en el SP1 y posterior de SQL Server 2008 S. E. (http://support.microsoft.com/kb/970070).

 Una vez que las páginas están bloqueadas no son considerados parte de la memoria disponible. Sin embargo, AWE sólo puede ser usado para bloquear en SQL Server asignaciones en el búfer (entrada y salida). Windows puede todavía recortar la memoria asignada a otros procesos, que pueden afecta a los recursos que dependen de SQL Server.


 AWE en sistemas de 64 bits, se debe utilizar si existen problemas después de actualizar los controladores de dispositivos y después de limitar la memoria máxima del servidor.


 No se debe utilizar por defecto las mejores prácticas en todos los servidores SQL. Es una solución temporal y no destinada a sustituir el comportamiento por defecto en cada aplicación de servidor de 64 bits de SQL.

 Si AWE está trabajando verá el mensaje siguiente en el registro de errores de SQL Server:

"Using Locked Pages for Buffer Pool."

 

 Windows Server 2008 ha mejorado la forma en que maneja las solicitudes de grandes cantidades de memoria, así que en teoría no debería aparecer este problema en esta plataforma.

 Lecturas aconsejadas: http://www.microsoft.com/windowsserver2008/en/us/64bit-computing.aspx

 

A puntes y recopilaciones de Norman M. Pardell

 

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.

publicado por normanmpardell a las 20:25 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Como renombrar una instancia de SQL Server. sp_dropserver. sp_addserver
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad