Compartir a través de


Opciones de configuración de memoria del servidor

Use las dos opciones de memoria del servidor, memoria mínima del servidor y memoria máxima del servidor, para volver a configurar la cantidad de memoria (en megabytes) administrada por el Administrador de memoria de SQL Server para un proceso de SQL Server usado por una instancia de SQL Server.

La configuración predeterminada para la memoria mínima del servidor es 0 y la configuración predeterminada para la memoria máxima del servidor es 2147483647 MB. De forma predeterminada, SQL Server puede cambiar sus requisitos de memoria de manera dinámica basándose en los recursos del sistema disponibles.

Nota:

Establecer la memoria máxima del servidor en el valor mínimo puede reducir gravemente el rendimiento de SQL Server e incluso impedir que se inicie. Si no puede iniciar SQL Server después de cambiar esta opción, iníciela con la opción de inicio -f y restablezca la memoria máxima del servidor a su valor anterior. Para obtener más información, consulte Opciones de inicio del servicio motor de base de datos.

Cuando SQL Server usa memoria dinámicamente, consulta el sistema periódicamente para determinar la cantidad de memoria libre. Mantener esta memoria libre impide que el sistema operativo (SO) pagine. Si hay menos memoria libre, SQL Server libera memoria en el sistema operativo. Si hay más memoria libre, SQL Server puede asignar más memoria. SQL Server agrega memoria solo cuando su carga de trabajo requiere más memoria; Un servidor en reposo no aumenta el tamaño de su espacio de direcciones virtual.

Vea el ejemplo B de una consulta para devolver la memoria usada actualmente. max server memory controls the SQL Server memory allocation, including the buffer pool, compile memory, all caches, qe memory grants, lock manager memory, and clr memory (básicamente any memory clerk found in sys.dm_os_memory_clerks). La memoria de las pilas de subprocesos, los montones de memoria, los proveedores de servidores vinculados distintos de SQL Server y cualquier memoria asignada por un archivo DLL que no sea de SQL Server no se controla mediante el número máximo de memoria del servidor.

SQL Server usa la API de notificación de memoria QueryMemoryResourceNotification para determinar cuándo el Administrador de memoria de SQL Server puede asignar memoria y liberar memoria.

Se recomienda permitir que SQL Server use memoria dinámicamente; sin embargo, puede establecer las opciones de memoria manualmente y restringir la cantidad de memoria a la que puede acceder SQL Server. Antes de establecer la cantidad de memoria para SQL Server, determine la configuración de memoria adecuada restando, de la memoria física total, la memoria necesaria para el sistema operativo y cualquier otra instancia de SQL Server (y otros usos del sistema, si el equipo no está totalmente dedicado a SQL Server). Esta diferencia es la cantidad máxima de memoria que puede asignar a SQL Server.

Establecer manualmente las opciones de memoria

Las opciones del servidor min server memory y max server memory se pueden configurar para cubrir un rango de valores de memoria. Este método es útil para que los administradores del sistema o de la base de datos configuren una instancia de SQL Server junto con los requisitos de memoria de otras aplicaciones u otras instancias de SQL Server que se ejecutan en el mismo host.

Nota:

Las opciones memoria mínima del servidor y memoria máxima del servidor son opciones avanzadas. Si usa el procedimiento almacenado del sistema sp_configure para cambiar esta configuración, solo puede cambiarlos cuando mostrar opciones avanzadas esté establecida en 1. Esta configuración surte efecto inmediatamente sin reiniciar el servidor.

Use min_server_memory para garantizar una cantidad mínima de memoria disponible para el Administrador de memoria de SQL Server para una instancia de SQL Server. SQL Server no asignará inmediatamente la cantidad de memoria especificada en memoria mínima del servidor al iniciarse. Sin embargo, después de que el uso de memoria haya alcanzado este valor debido a la carga del cliente, SQL Server no puede liberar memoria a menos que se reduzca el valor de memoria mínima del servidor . Por ejemplo, cuando varias instancias de SQL Server pueden existir simultáneamente en el mismo host, establezca el parámetro min_server_memory en lugar de max_server_memory para reservar memoria para una instancia. Además, establecer un valor de min_server_memory es esencial en un entorno virtualizado para garantizar que la presión de memoria del host subyacente no intente desasignar la memoria del grupo de búferes en una máquina virtual (VM) de SQL Server invitada más allá de lo necesario para un rendimiento aceptable.

Nota:

No se garantiza que SQL Server asigne la cantidad de memoria especificada en memoria mínima del servidor. Si la carga en el servidor nunca requiere asignar la cantidad de memoria especificada en memoria mínima del servidor, SQL Server se ejecutará con menos memoria.

Use max_server_memory para garantizar que el sistema operativo no experimenta presión perjudicial en la memoria. Para establecer la configuración máxima de memoria del servidor, supervise el consumo general del proceso de SQL Server para determinar los requisitos de memoria. Para ser más preciso con estos cálculos para una sola instancia:

  • A partir de la memoria total del sistema operativo, reserve 1 GB-4 GB al propio sistema operativo.
  • A continuación, resta el equivalente de posibles asignaciones de memoria de SQL Server fuera del control de máxima memoria del servidor, que se compone del tamaño de pila 1 * máximo subprocesos de trabajo calculados 2 + parámetro de inicio -g 3 (o 256 MB por defecto si -g no está establecido). Lo que permanece debe ser la configuración de max_server_memory para una única configuración de instancia.

1 Consulte la guía de arquitectura de administración de memoria para obtener información sobre los tamaños de pila de subprocesos por arquitectura.

2 Consulte la página de documentación sobre cómo configurar la opción de configuración máxima del servidor de subprocesos de trabajo para obtener información sobre los subprocesos de trabajo predeterminados calculados para un número determinado de CPU afinidadizadas en el host actual.

3 Consulte la página de documentación en Opciones de inicio del servicio del motor de base de datos para obtener información sobre el parámetro -g de inicio. Aplicable solo a SQL Server de 32 bits (SQL Server 2005 a SQL Server 2014).

Tipo de SO Cantidades mínimas de memoria permitidas para el número máximo de memoria del servidor
32 bits 64 MB
64 bits 128 MB

Configuración de opciones de memoria mediante SQL Server Management Studio

Use las dos opciones de memoria del servidor, memoria mínima del servidor y memoria máxima del servidor, para volver a configurar la cantidad de memoria (en megabytes) administrada por el Administrador de memoria de SQL Server para una instancia de SQL Server. De forma predeterminada, SQL Server puede cambiar sus requisitos de memoria de manera dinámica basándose en los recursos del sistema disponibles.

Procedimiento para configurar una cantidad fija de memoria

Para establecer una cantidad fija de memoria:

  1. En el Explorador de objetos, haga clic con el botón derecho en un servidor y seleccione Propiedades.

  2. Haga clic en el nodo Memoria .

  3. En Opciones de memoria del servidor, escriba la cantidad que desee para Memoria mínima del servidor y Memoria máxima del servidor.

    Use la configuración predeterminada para permitir que SQL Server cambie sus requisitos de memoria dinámicamente en función de los recursos del sistema disponibles. La configuración predeterminada para la memoria mínima del servidor es 0 y la configuración predeterminada para la memoria máxima del servidor es 2147483647 megabytes (MB).

Maximizar el rendimiento de los datos para las aplicaciones de red

Para optimizar el uso de memoria del sistema para SQL Server, debe limitar la cantidad de memoria que usa el sistema para el almacenamiento en caché de archivos. Para limitar la memoria caché del sistema de archivos, asegúrese de que no está seleccionado Maximizar el rendimiento de los datos para el uso compartido de archivos . Para especificar la memoria caché del sistema de archivos más pequeña, seleccione Minimizar memoria usada o Equilibrar.

Para comprobar la configuración actual en el sistema operativo

  1. Haga clic en Inicio, en Panel de control, haga doble clic en Conexiones de redy, a continuación, haga doble clic en Conexión de área local.

  2. En la pestaña General , haga clic en Propiedades, seleccione Redes de Microsoft de uso compartido de archivos e impresoras y, a continuación, haga clic en Propiedades.

  3. Si se selecciona Maximizar el rendimiento de los datos para las aplicaciones de red , elija cualquier otra opción, haga clic en Aceptar y, a continuación, cierre el resto de los cuadros de diálogo.

Bloquear páginas en memoria

Esta directiva de Windows determina qué cuentas pueden usar un proceso para mantener los datos en la memoria física, impidiendo que el sistema realice la paginación de los datos en la memoria virtual del disco. El bloqueo de páginas en memoria puede mantener la capacidad de respuesta del servidor cuando se produce la paginación de memoria en el disco. La opción Bloquear Páginas en Memoria de SQL Server se establece en ON en instancias de 32 y 64 bits de SQL Server 2014 edición Standard y versiones posteriores cuando a la cuenta con privilegios para ejecutar sqlservr.exe se le concede el derecho de usuario "Páginas bloqueadas en memoria" (LPIM) de Windows. En versiones anteriores de SQL Server, establecer la opción Bloquear páginas para una instancia de 32 bits de SQL Server requiere que la cuenta con privilegios para ejecutar sqlservr.exe tenga el derecho de usuario LPIM y la opción de configuración "awe_enabled" esté establecida en ACTIVADO.

Para deshabilitar la opción Bloquear páginas en memoria para SQL Server, quite el derecho de usuario "Páginas bloqueadas en memoria" para la cuenta de inicio de SQL Server.

Para deshabilitar las páginas de bloqueo en la memoria

Para deshabilitar la opción bloquear páginas en memoria:

  1. En el menú Inicio , haga clic en Ejecutar. En el cuadro Abrir, escriba gpedit.msc

    Se abrirá el cuadro de diálogo Directiva de grupo .

  2. En la consola de directiva de grupo , expanda Configuración del equipo y, a continuación, expanda Configuración de Windows.

  3. Expanda Configuración de seguridad y, a continuación, expanda Directivas locales.

  4. Seleccione la carpeta Asignación de derechos de usuario .

    Las directivas se mostrarán en el panel de detalles.

  5. En el panel, haga doble clic en Bloquear páginas en la memoria.

  6. En el cuadro de diálogo Configuración de directiva de seguridad local , seleccione la cuenta con privilegios para ejecutar sqlservr.exe y haga clic en Quitar.

Administrador de Memoria Virtual

Los sistemas operativos de 32 bits proporcionan acceso a 4 GB de espacio de direcciones virtuales. 2 GB de memoria virtual son privados para cada proceso y están disponibles para su uso en aplicaciones. 2 GB está reservado para el uso del sistema operativo. Todas las ediciones del sistema operativo incluyen un conmutador que puede proporcionar a las aplicaciones acceso hasta 3 GB de espacio de direcciones virtuales, lo que limita el sistema operativo a 1 GB. Para obtener más información sobre cómo usar la configuración de memoria del conmutador, consulte la documentación de Windows sobre el ajuste de 4 gigabytes (4GT). Cuando SQL Server de 32 bits se ejecuta en el sistema operativo de 64 bits, su espacio de direcciones virtuales disponible para el usuario es de 4 GB completos.

Las regiones confirmadas del espacio de direcciones se asignan a la memoria física disponible mediante Windows Virtual Memory Manager (VMM).

Para obtener más información sobre la cantidad de memoria física compatible con diferentes sistemas operativos, consulte la documentación de Windows "Límites de memoria para versiones de Windows".

Los sistemas de memoria virtual permiten el exceso de compromiso de la memoria física, de modo que la proporción de memoria virtual a física puede superar la 1:1. Como resultado, los programas más grandes se pueden ejecutar en equipos con una variedad de configuraciones de memoria física. Sin embargo, el uso de memoria virtual significativamente mayor que el promedio combinado de conjuntos de trabajo de todos los procesos puede provocar un rendimiento deficiente.

Las opciones memoria mínima del servidor y memoria máxima del servidor son opciones avanzadas. Si usa el procedimiento almacenado del sistema sp_configure para cambiar esta configuración, solo puede cambiarlos cuando mostrar opciones avanzadas esté establecida en 1. Esta configuración surte efecto inmediatamente sin reiniciar el servidor.

Ejecución de varias instancias de SQL Server

Al ejecutar varias instancias del motor de base de datos, hay tres enfoques que puede usar para administrar la memoria:

  • Use la memoria máxima del servidor para controlar el uso de memoria. Establezca la configuración máxima para cada instancia, teniendo cuidado de que la asignación total no sea mayor que la memoria física total en la máquina. Es posible que quiera proporcionar a cada instancia memoria proporcional a su tamaño esperado de carga de trabajo o base de datos. Este enfoque tiene la ventaja de que cuando se inician nuevos procesos o instancias, la memoria libre estará disponible para ellos inmediatamente. El inconveniente es que si no ejecuta todas las instancias, ninguna de las instancias en ejecución podrá usar la memoria libre restante.

  • Use memoria mínima del servidor para controlar el uso de memoria. Establezca la configuración mínima para cada instancia, de modo que la suma de estos mínimos sea de 1 a 2 GB menor que la memoria física total en la máquina. De nuevo, puede establecer estos mínimos proporcionalmente a la carga esperada de esa instancia. Este enfoque tiene la ventaja de que, si no todas las instancias se ejecutan al mismo tiempo, las que se ejecutan pueden usar la memoria libre restante. Este enfoque también es útil cuando hay otro proceso que consume mucha memoria en el equipo, ya que aseguraría que SQL Server obtendría al menos una cantidad razonable de memoria. El inconveniente es que, cuando se inicia una nueva instancia (o cualquier otro proceso), las instancias en ejecución pueden tardar algún tiempo en liberar memoria, especialmente si deben volver a escribir páginas modificadas en sus bases de datos para hacerlo.

  • No haga nada (no recomendado). Las primeras instancias que se enfrentan a una carga de trabajo tienden a utilizar toda la memoria del sistema. Las instancias inactivas o las instancias iniciadas más adelante pueden acabar ejecutándose con una cantidad mínima de memoria disponible. SQL Server no intenta equilibrar el uso de memoria entre instancias. Sin embargo, todas las instancias responderán a las señales de notificación de memoria de Windows para ajustar el tamaño de su superficie de memoria. Windows no equilibra la memoria entre aplicaciones con la API de notificación de memoria. Simplemente proporciona comentarios globales sobre la disponibilidad de memoria en el sistema.

Puede cambiar esta configuración sin reiniciar las instancias, por lo que puede experimentar fácilmente para encontrar la mejor configuración para el patrón de uso.

Proporcionar la cantidad máxima de memoria a SQL Server

32 bits 64 bits
Memoria convencional Hasta procesar el límite de espacio de direcciones virtuales en todas las ediciones de SQL Server:

2 GB

3 GB con parámetro de arranque /3gb *

4 GB en WOW64**
Hasta procesar el límite de espacio de direcciones virtuales en todas las ediciones de SQL Server:

8 TB en la arquitectura x64

* /3gb es un parámetro de arranque del sistema operativo. Para obtener más información, visite MSDN Library.

**WOW64 (Windows en Windows 64) es un modo en el que SQL Server de 32 bits se ejecuta en un sistema operativo de 64 bits. Para obtener más información, visite MSDN Library.

Ejemplos

Ejemplo A

En el ejemplo siguiente se establece la max server memory opción en 4 GB:

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 4096;  
GO  
RECONFIGURE;  
GO  

Ejemplo B. Determinación de la asignación de memoria actual

La consulta siguiente devuelve información acerca de la memoria asignada actual.

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,  
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

Véase también

Monitoreo y ajuste para el rendimiento
RECONFIGURE (Transact-SQL)
Opciones de configuración de servidor (SQL Server)
sp_configure (Transact-SQL)