Limite el máximo de memoria del servidor para evitar sobrecargar la memoria - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Limite el máximo de memoria del servidor para evitar sobrecargar la memoria

Por motivos de rendimiento, el servidor de SQL no libera la memoria que ya ha asignado. Cuando se inicia el servidor de SQL, ocupa lentamente la memoria especificada en la opción min_server_memory y, después, sigue creciendo hasta alcanzar el valor especificado en la opción max_server_memory. (Para obtener más información sobre estos parámetros, consulte Opciones de configuración de memoria de servidor en la documentación del servidor de SQL).

La memoria del servidor de SQL tiene dos componentes: el grupo de búferes y el grupo sin búfer (también denominado memoria que dejar o MTL). El valor de la opción max_server_memory determina el tamaño del conjunto de búferes del servidor de SQL, que consta de la caché de búferes, la caché de procedimientos, la caché de planes, las estructuras de búfer y otras cachés.

A partir del servidor de SQL 2012, min_server_memory y max_server_memory representan todas las asignaciones de memoria de todas las cachés, incluyendo SQLGENERAL, SQLBUFFERPOOL, SQLQUERYCOMPILE, SQLQUERYPLAN, SQLQUERYEXEC, SQLOPTIMIZER, y SQLCLR. Para obtener una lista completa de empleados de memoria en max_server_memory, consulte sys.dm_os_memory_clerks en la documentación de Microsoft para el servidor de SQL.

Para comprobar el valor max_server_memory actual, utilice el comando:

$ sp_configure 'max_server_memory'

Se recomienda limitar max_server_memory a un valor que no suponga una presión de memoria en todo el sistema. No existe una fórmula universal que se aplique a todos los entornos, pero en esta sección ofrecemos algunas pautas. max_server_memory es una opción dinámica, por lo que se puede cambiar en tiempo de ejecución.

Como punto de partida, puede determinar max_server_memory de la siguiente manera:

max_server_memory = total_RAM – (memory_for_the_OS + MTL)

donde:

  • La memoria del sistema operativo es de 1 a 4 GB.

  • El MTL (memoria restante) incluye el tamaño de la pila, que es de 2 MB en máquinas de 64 bits por subproceso de trabajo y se puede calcular de la siguiente forma: MTL = stack_size * max_worker_threads

Como alternativa también puede utilizar la.

max_server_memory = total_RAM – (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

donde la cantidad básica de memoria RAM se determina de la siguiente forma:

  • Si la RAM del servidor está entre 4 GB y 16 GB, deje 1 GB por cada 4 GB de RAM. Por ejemplo, para un servidor de 16 GB, deje 4 GB.

  • Si la RAM del servidor es superior a 16 GB, deje 1 GB por cada 4 GB de RAM hasta 16 GB y 1 GB por cada 8 GB de RAM por encima de 16 GB.

Por ejemplo, si un servidor tiene 256 GB de RAM, el cálculo será:

  • 1 GB para el sistema operativo

  • Hasta 16 GB de RAM: 16/4 = 4 GB

  • RAM restante por encima de 16 GB: (256-16) /8 = 30

  • RAM total restante: 1 + 4 + 30 = 35 GB

  • max_server_memory: 256 - 35 = 221 GB

Tras la configuración inicial, supervise la memoria que puede liberar durante una carga de trabajo normal para determinar si necesita aumentar o disminuir la memoria asignada al servidor de SQL.

nota

Windows indica que la notificación de pocos recursos de memoria es de 96 MB, por lo que es recomendable disponer de un búfer, pero puede establecer que los MB disponibles sean superiores a 1 GB en servidores más grandes con 256 GB o más de RAM.

Para obtener información adicional, consulte la sección sobre la Guía de arquitectura de administración de memoria en la documentación de Microsoft para el servidor de SQL.