En el post anterior explicamos los cinco parámetros que nos ayudan a configurar la memoria de SQL Server en este post veremos como afinamos cada uno de ellos y cuales son los valores óptimos así el funcionamiento de estos.
Uso de memoria dinámica.
Esta opción es la predeterminada por SQL Server para manejar la memoria de forma automática basando la administración en la carga de trabajo actual y los recursos disponibles en este caso hablamos solo de la memoria ram.
Con la memoria configurada dinámicamente por lo general no necesita establecer valores de memoria mínimo y máximo, sin embargo es recomendable establecerlos cuando el servidor sea exclusivo para uso de SQL Server con ello lograr un mejor rendimiento de SQL, si es este el caso el valor óptimo debería ser mayor o igual a la siguiente formula:
min server memory = 8 Mb + ( 24 Kb * NumerodeUsuarios )
Donde los 8 Megas son de uso exclusivo de SQL para cargar sus binarios para sus estructuras internas
los 24 KB se descomponen en 96 bytes para la administración de los bloqueos, 2880 bytes para las bases de datos abiertas y 276 bytes para objetos abiertos los cuales pueden ser vistas, tablas, triggers, stored procedures, etc, etc.
NumerodeUsuarios, es el numero promedio de conexiones simultáneas. puedes usar select @@Connections para sacar este valor.
Para establecer los valores de memoria mínima y máxima use los siguientes comandos T-SQL
Uso de memoria fija
Cuando reserva memoria física para SQL Server SQL Server le indica al sistema operativo que no intercambie las paginas de memoria, cuando tenemos un sistema dedicado para SQL Server, la memoria reservada puede mejorar notablemente el rendimiento ya que no usa ni paginación ni caché, en lugar usa memoria Ram lo que da una mejora en en el tiempo de respuesta a nuestras consultas y procesos.
La diferencia entre asignar valores de memoria física o dinámica no radica en la asignación de valores a estos parámetros por que recordemos que podemos también establecer estos de memoria máxima y mínima pero que sea dinámica, el parámetro "set working set size" con valor de 1 hace la diferencia entre dinámica (valor 0) o física (valor 1)
El modo de uso del procedimiento almacenado es el siguiente:
Habilitación para Memoria AWE
Esta opción solo es valida en versiones Enterprise y Developer, asi que si tienes alguna versión de grupo de trabajo o estándar ni pierda el tiempo SQL la pasara por alto, pero bueno en que nos ayuda activar la AWE, la awe es algo así como extender la memoria para que use mas de lo que se puede mapear, como cuando extendíamos la memoria de DOS, acá es algo similar un sistema operativo de 32 Bits solo puede mapear 4 Gb máximo, así que para hacerlo entrar en razón le tenemos que habilitar un parámetro en boot.ini llamado 3GP el cual hace la función de extender la direcciones de ventanas (AWE Address Windowing Extensions) y mapear toda la memoria disponible, después eso también le tenemos que indicar a SQL Server que habilite este parámetro para que soporte mas alla de 4Gb de memoria, en SQL Server de 64 bits esto es transparente, es decir, el sistema viene preparado para mapear tanta memoria ram como este permitida según la versión del mismo.
Para habilitar el awe en SQL ejecute la siguiente instrucción.
Nota: en SQL Server 2000 esta función solo es aceptada por SQL si instalas en SP4, aun asi solo se habilita el 50% de memoria disponible debido a un bug, es decir si tienes 10Gb SQL solo podrá mapear 5Gb para que use los otros 5Gb necesitas instalar un Hot Fix para este bug. Los detalles del Hot Fix lo encuentras en este enlace Hot Fix
Optimización de memoria para indexación
Como opción predeterminada SQL Server administra dinámicamente la cantidad de memoria asignada para operaciones de creación de índices, si necesita mas memoria y hay disponible asignara mas memoria, pero si no hay memoria disponible usara la que esta asignada por default.
Casi siempre la administración dinámica funciona bien, pero el principal problema surge cuando usamos tablas e índices particionados y estos no están alineados, en estos casos existe un alto grado de paralelismo al crearse grandes cantidades de operaciones de creaciones de índices al mismo tiempo, si detecta que estas operaciones pudieran afectar el rendimiento de su SQL, opte por asignar mas memoria a estas operaciones. de igual modo es indispensable cuando damos mantenimiento seguido a los índices y este mantenimiento incluye recreación de índices.
Para cambiar los valores de este parámetro usa la siguiente línea.
Asignación de memoria para consultas
Por default SQL Server maneja 1024 Kb de ram para cada una de nuestras consultas, este valor esta calculado para una consulta ordenaría por usuario, pero se puede asignar desde 512 Kb hasta 2Gb
lo aconsejable es seguir la siguiente ecuación:
min memory per query = MemoriaLibre / (TamañoPromediodeConsulta * NumeroPromediodeConsulta)
Por ejemplo si el sistema tiene 1 Gb de memoria libre y el tamaño de consulta promedio es de 5 Mb y el numero promedio de consultas simultáneas es de 25 el tamaño óptimo para memoria de consulta es de 1024 / (5 * 25 ) = 8.192 Mb por consulta o 8388 Kb que es el valor que le debemos de pasar
Siguiendo el ejemplo la forma de configurar este valor es:
Espero les sea de utilidad este breve post de la administración de la memoria en SQL Server, si tienen dudas o comentarios los puedes dejar en la pagina o mandar correo directo a elicxvg@ti-m.com.mx
Saludos. Elicx Villaseca González