Opciones de configuración de memoria del servidorServer Memory Configuration Options

SE APLICA A: síSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Use las dos opciones de memoria de servidor Memoria de servidor mínima y Memoria de servidor máximapara reconfigurar 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 ServerSQL Server.Use the two server memory options, min server memory and max server memory, to reconfigure the amount of memory (in megabytes) that is managed by the SQL Server Memory Manager for a SQL Server process used by an instance of SQL ServerSQL Server.

La configuración predeterminada para la memoria de servidor mínima es 0, y para la memoria de servidor máxima es 2 147 483 647 megabytes (MB).The default setting for min server memory is 0, and the default setting for max server memory is 2,147,483,647 megabytes (MB). De forma predeterminada, SQL ServerSQL Server puede cambiar sus requisitos de memoria de manera dinámica basándose en los recursos del sistema disponibles.By default, SQL ServerSQL Server can change its memory requirements dynamically based on available system resources. Para obtener más información, consulte Administración dinámica de memoria.For more information, see dynamic memory management.

La cantidad de memoria mínima permitida para memoria de servidor máxima es 128 MB.The minimum memory amount allowable for max server memory is 128 MB.

Importante

Si establece el valor de memoria de servidor máxima en una cifra demasiado alta, puede producir que una única de instancia de SQL ServerSQL Server tenga que competir por la memoria con otras instancias de SQL ServerSQL Server hospedadas en el mismo host.Setting max server memory value too high can cause a single instance of SQL ServerSQL Server might have to compete for memory with other SQL ServerSQL Server instances hosted on the same host. Sin embargo, si establece este valor en una cifra demasiado baja, podría producir problemas de rendimiento y presión de memoria significativos.However, setting this value too low could cause significant memory pressure and performance problems. Si establece Memoria de servidor máxima en el valor mínimo, puede incluso evitar que SQL ServerSQL Server se inicie.Setting max server memory to the minimum value can even prevent SQL ServerSQL Server from starting. Si no puede iniciar SQL ServerSQL Server después de cambiar esta opción, inicie esta herramienta mediante la opción de inicio -f y restablezca la opción Memoria de servidor máxima a su valor anterior.If you cannot start SQL ServerSQL Server after changing this option, start it using the -f startup option and reset max server memory to its previous value. Para más información, consulte Opciones de inicio del servicio de motor de base de datos.For more information, see Database Engine Service Startup Options.

SQL ServerSQL Server puede usar memoria dinámicamente; sin embargo, es posible establecer las opciones de memoria manualmente y restringir la cantidad de memoria a la que SQL ServerSQL Server puede acceder.can use memory dynamically; however, you can set the memory options manually and restrict the amount of memory that SQL ServerSQL Server can access. Antes de establecer la cantidad de memoria para SQL ServerSQL Server, determine la configuración de memoria apropiada restando de la memoria física total la memoria necesaria para el sistema operativo, las asignaciones de memorias no controladas por la configuración max_server_memory y todas las demás instancias de SQL ServerSQL Server (y otros usos del sistema, si el equipo no está dedicado totalmente a SQL ServerSQL Server).Before you set the amount of memory for SQL ServerSQL Server, determine the appropriate memory setting by subtracting, from the total physical memory, the memory required for the OS, memory allocations not controlled by the max_server_memory setting, and any other instances of SQL ServerSQL Server (and other system uses, if the computer is not wholly dedicated to SQL ServerSQL Server). Esta diferencia es la cantidad de memoria máxima que puede asignar a la instancia de SQL ServerSQL Server actual.This difference is the maximum amount of memory you can assign to the current SQL ServerSQL Server instance.

Establecimiento manual de las opciones de memoriaSetting the memory options manually

Las opciones de servidor memoria de servidor mínima y memoria de servidor máxima pueden establecerse en un intervalo de valores de memoria.The server options min server memory and max server memory can be set to span a range of memory values. Este método es útil para que los administradores de bases de datos o de sistemas configuren una instancia de SQL ServerSQL Server junto con los requisitos de memoria de otras aplicaciones u otras instancias de SQL ServerSQL Server que se ejecutan en el mismo host.This method is useful for system or database administrators to configure an instance of SQL ServerSQL Server in conjunction with the memory requirements of other applications, or other instances of SQL ServerSQL Server that run on the same host.

Nota

Memoria de servidor mínima y Memoria de servidor máxima son opciones avanzadas.The min server memory and max server memory options are advanced options. Si usa el procedimiento almacenado del sistema sp_configure para cambiar estos valores, podrá cambiarlos solo si Mostrar opciones avanzadas tiene establecido el valor 1.If you are using the sp_configure system stored procedure to change these settings, you can change them only when show advanced options is set to 1. Estos valores surten efecto inmediatamente, sin necesidad de reiniciar el servidor.These settings take effect immediately without a server restart.

Use min_server_memory para garantizar una cantidad mínima de memoria disponible para el Administrador de memoria de SQL ServerSQL Server en una instancia de SQL ServerSQL Server.Use min_server_memory to guarantee a minimum amount of memory available to the SQL ServerSQL Server Memory Manager for an instance of SQL ServerSQL Server. SQL ServerSQL Server no asignará inmediatamente la cantidad de memoria especificada en Memoria de servidor mínima durante el inicio.will not immediately allocate the amount of memory specified in min server memory on startup. No obstante, cuando el uso de memoria ha alcanzado este valor debido a una carga del cliente, SQL ServerSQL Server no puede liberar memoria a menos que se reduzca el valor de Memoria de servidor mínima .However, after memory usage has reached this value due to client load, SQL ServerSQL Server cannot free memory unless the value of min server memory is reduced. Por ejemplo, cuando puede haber varias instancias de SQL ServerSQL Server en el mismo host simultáneamente, establezca el parámetro min_server_memory en vez de max_server_memory para reservar memoria para una instancia.For example, when several instances of SQL ServerSQL Server can exist concurrently in the same host, set the min_server_memory parameter instead of max_server_memory for the purpose of reserving memory for an instance. Además, el establecimiento del valor min_server_memory es esencial en un entorno virtualizado para asegurarse de que la presión de memoria del host subyacente no intenta desasignar memoria del grupo de búferes en una máquina virtual (VM) de SQL ServerSQL Server invitada más allá de lo necesario para disfrutar de un rendimiento aceptable.Also, setting a min_server_memory value is essential in a virtualized environment to ensure memory pressure from the underlying host does not attempt to deallocate memory from the buffer pool on a guest SQL ServerSQL Server virtual machine (VM) beyond what is needed for acceptable performance.

Nota

No es seguro que SQL ServerSQL Server asigne la cantidad de memoria especificada en Memoria de servidor mínima.SQL ServerSQL Server is not guaranteed to allocate the amount of memory specified in min server memory. Si la carga en el servidor no precisa nunca que se asigne la cantidad de memoria especificada en Memoria de servidor mínima, SQL ServerSQL Server se ejecutará con menos memoria.If the load on the server never requires allocating the amount of memory specified in min server memory, SQL ServerSQL Server will run with less memory.

Use max_server_memory para garantizar que el sistema operativo no experimenta presión de memoria perjudicial.Use max_server_memory to guarantee the OS does not experience detrimental memory pressure. Para establecer la configuración de memoria de servidor máxima, supervise el consumo total del proceso SQL ServerSQL Server para determinar los requisitos de memoria.To set max server memory configuration, monitor overall consumption of the SQL ServerSQL Server process in order to determine memory requirements. Para ser más precisos con estos cálculos para una única instancia:To be more accurate with these calculations for a single instance:

  • Desde la memoria total del sistema operativo, reserve entre 1 y 4 GB para el propio sistema.From the total OS memory, reserve 1GB-4GB to the OS itself.
  • Después, reste el equivalente de las asignaciones de memoria de SQL ServerSQL Server potenciales al control Memoria de servidor máxima, que está formado por tamaño de la pila 1 * subprocesos de trabajo máximos calculados 2 .Then subtract the equivalent of potential SQL ServerSQL Server memory allocations outside the max server memory control, which is comprised of stack size 1 * calculated max worker threads 2. El resto debería ser la configuración de max_server_memory para la instalación de una única instancia.What remains should be the max_server_memory setting for a single instance setup.

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.1 Refer to the Memory Management Architecture guide for information on thread stack sizes per architecture.

2 Consulte la página de documentación sobre cómo Establecer la opción de configuración del servidor Máximo de subprocesos de trabajo para obtener información sobre los subprocesos de trabajo predeterminados calculados para un determinado número de CPU con afinidad en el host actual.2 Refer to the documentation page on how to Configure the max worker threads Server Configuration Option, for information on the calculated default worker threads for a given number of affinitized CPUs in the current host.

Cómo configurar las opciones de memoria con SQL Server Management StudioSQL Server Management StudioHow to configure memory options using SQL Server Management StudioSQL Server Management Studio

Use las dos opciones de memoria de servidor memoria de servidor mínima y memoria de servidor máximapara reconfigurar la cantidad de memoria (en megabytes) administrada por el Administrador de memoria de SQL ServerSQL Server para una instancia de SQL ServerSQL Server.Use the two server memory options, min server memory and max server memory, to reconfigure the amount of memory (in megabytes) managed by the SQL ServerSQL Server Memory Manager for an instance of SQL ServerSQL Server. De forma predeterminada, SQL ServerSQL Server puede cambiar sus requisitos de memoria de manera dinámica basándose en los recursos del sistema disponibles.By default, SQL ServerSQL Server can change its memory requirements dynamically based on available system resources.

Para establecer una cantidad fija de memoria:To set a fixed amount of memory:

  1. En el Explorador de objetos, haga clic con el botón derecho en un servidor y seleccione Propiedades.In Object Explorer, right-click a server and select Properties.

  2. Haga clic en el nodo Memoria .Click the Memory node.

  3. En Opciones de memoria del servidor, escriba la misma cantidad que quiera para Memoria de servidor mínima y Memoria de servidor máxima.Under Server Memory Options, enter the same amount that you want for Minimum server memory and Maximum server memory.

    Use la configuración predeterminada si desea que SQL ServerSQL Server pueda cambiar dinámicamente sus requisitos de memoria según los recursos del sistema disponibles.Use the default settings to allow SQL ServerSQL Server to change its memory requirements dynamically based on available system resources. Se recomienda establecer una memoria de servidor máxima, tal y como se describe anteriormente.It is recommended to set a max server memory as detailed above.

Bloquear páginas en la memoria (LPIM)Lock Pages in Memory (LPIM)

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.This Windows policy determines which accounts can use a process to keep data in physical memory, preventing the system from paging the data to virtual memory on disk. El bloqueo de páginas en memoria puede mantener el servidor activo cuando se produce la paginación en la memoria del disco.Locking pages in memory may keep the server responsive when paging memory to disk occurs. La opción Bloquear páginas en memoria está establecida en ON en las instancias de la edición SQL ServerSQL Server Standard y posterior cuando a la cuenta con privilegios para ejecutar sqlservr.exe se le ha concedido el derecho de usuario de Windows Bloquear páginas en memoria (LPIM).The Lock Pages in Memory option is set to ON in instances of SQL ServerSQL Server Standard edition and higher when the account with privileges to run sqlservr.exe has been granted the Windows Lock Pages in Memory (LPIM) user right.

Para deshabilitar la opción Bloquear páginas en memoria para SQL ServerSQL Server, quite el derecho de usuario Bloquear páginas en memoria a la cuenta con privilegios que ejecuta la cuenta de inicio de sqlservr.exe (la cuenta de inicio de SQL ServerSQL Server).To disable the Lock Pages In Memory option for SQL ServerSQL Server, remove the Lock Pages in Memory user right for the account with privileges to run sqlservr.exe (the SQL ServerSQL Server startup account) startup account.

La configuración de esta opción no afecta a la administración dinámica de memoria de SQL ServerSQL Server, lo que permite realizar expansiones y contracciones mediante solicitudes de otros distribuidores de memoria.Setting this option does not affect SQL ServerSQL Server dynamic memory management, allowing it to expand or shrink at the request of other memory clerks. Cuando se usa el derecho de usuario Bloquear páginas en la memoria se recomienda establecer un límite superior para la memoria de servidor máxima, tal y como se describe anteriormente.When using the Lock Pages in Memory user right it is recommended to set an upper limit for max server memory as detailed above.

Importante

Esta opción solo se debería usar en caso necesario, principalmente si hay algún indicio de que el proceso sqlservr se está transfiriendo al almacenamiento auxiliar. En este caso, se notificará el error 17890 en el registro de errores, similar al ejemplo siguiente: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.Setting this option should only be used when necessary, namely if there are signs that sqlservr process is being paged out. In this case, error 17890 will be reported in the Errorlog, resembling the below example: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%. A partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x), no se necesita la marca de seguimiento 845 en Standard Edition para usar páginas bloqueadas.Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), trace flag 845 is not needed for Standard Edition to use Locked Pages.

Para habilitar Bloquear páginas en la memoriaTo enable Lock Pages in Memory

Para habilitar la opción de bloqueo de páginas en memoria:To enable the lock pages in memory option:

  1. En el menú Inicio , haga clic en Ejecutar.On the Start menu, click Run. En el cuadro Abrir , escriba gpedit.msc.In the Open box, type gpedit.msc.

    Se abrirá el cuadro de diálogo Directiva de grupo .The Group Policy dialog box opens.

  2. En la consola Directiva de grupo , expanda Configuración del equipoy, a continuación, expanda Configuración de Windows.On the Group Policy console, expand Computer Configuration, and then expand Windows Settings.

  3. Expanda Configuración de seguridady, a continuación, expanda Directivas locales.Expand Security Settings, and then expand Local Policies.

  4. Seleccione la carpeta Asignación de derechos de usuario .Select the User Rights Assignment folder.

    Las directivas se mostrarán en el panel de detalles.The policies will be displayed in the details pane.

  5. En el panel, haga doble clic en Bloquear páginas en la memoria.In the pane, double-click Lock pages in memory.

  6. En el cuadro de diálogo Configuración de la directiva de seguridad local, agregue la cuenta con privilegios para ejecutar sqlservr.exe (la cuenta de inicio de SQL ServerSQL Server).In the Local Security Policy Setting dialog box, add the account with privileges to run sqlservr.exe (the SQL ServerSQL Server startup account).

Ejecución de varias instancias de SQL ServerSQL ServerRunning multiple instances of SQL ServerSQL Server

Cuando esté ejecutando varias instancias de Motor de base de datosDatabase Engine, existen tres maneras con las que puede administrar la memoria:When you are running multiple instances of the Motor de base de datosDatabase Engine, there are three approaches you can use to manage memory:

  • Usar memoria de servidor máxima para controlar el uso de memoria, tal y como se detalla anteriormente.Use max server memory to control memory usage, as detailed above. Establezca los valores máximos de cada instancia, teniendo cuidado de que la asignación total no sea mayor que la memoria física total de su equipo.Establish maximum settings for each instance, being careful that the total allowance is not more than the total physical memory on your machine. Es buena idea proporcionar a cada instancia memoria proporcional a la carga de trabajo o al tamaño de la base de datos esperados.You might want to give each instance memory proportional to its expected workload or database size. Este método tiene la ventaja de que cuando se inician nuevos procesos o instancias, habrá memoria libre para ellos de forma inmediata.This approach has the advantage that when new processes or instances start up, free memory will be available to them immediately. El inconveniente es que si no está ejecutando todas las instancias, ninguna de las instancias que se están ejecutando podrá utilizar el resto de la memoria libre.The drawback is that if you are not running all of the instances, none of the running instances will be able to utilize the remaining free memory.

  • Usar memoria de servidor mínima para controlar el uso de memoria, tal y como se detalla anteriormente.Use min server memory to control memory usage, as detailed above. Establezca la configuración mínima de cada instancia, de manera que la suma de estos mínimos sea 1-2 GB menos que la memoria física total de su equipo.Establish minimum settings for each instance, so that the sum of these minimums is 1-2 GB less than the total physical memory on your machine. De nuevo, puede establecer estos mínimos proporcionalmente a la carga de trabajo que se espera por cada instancia.Again, you may establish these minimums proportionately to the expected load of that instance. Este método tiene la ventaja de que si no se ejecutan todas las instancias a la vez, las que se estén ejecutando pueden utilizar el resto de la memoria libre.This approach has the advantage that if not all instances are running at the same time, the ones that are running can use the remaining free memory. Este método también resulta útil cuando en el equipo se está ejecutando otro proceso que consuma mucha memoria, puesto que asegura que SQL ServerSQL Server recibirá, al menos, una cantidad de memoria razonable.This approach is also useful when there is another memory-intensive process on the computer, since it would insure that SQL ServerSQL Server would at least get a reasonable amount of memory. El inconveniente es que cuando se inicia una nueva instancia (o cualquier otro proceso), es posible que pase algún tiempo hasta que las instancias que se están ejecutando liberen memoria, especialmente si para ello deben escribir páginas modificadas en sus bases de datos.The drawback is that when a new instance (or any other process) starts, it may take some time for the running instances to release memory, especially if they must write modified pages back to their databases to do so.

  • No hacer nada (no se recomienda).Do nothing (not recommended). Las primeras instancias que se presenten con una carga de trabajo intentarán asignar toda la memoria.The first instances presented with a workload will tend to allocate all of memory. Puede que las instancias inactivas o las instancias que se inician más tarde terminen ejecutándose con una cantidad mínima de memoria disponible.Idle instances, or instances started later, may end up running with only a minimal amount of memory available. SQL ServerSQL Server no intenta equilibrar el uso de memoria en todas las instancias.makes no attempt to balance memory usage across instances. 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.All instances will, however, respond to Windows Memory Notification signals to adjust the size of their memory footprint. Windows no equilibra la memoria entre las aplicaciones con la API de notificación de memoria.Windows does not balance memory across applications with the Memory Notification API. Simplemente proporciona informes globales acerca de la disponibilidad de memoria del sistema.It merely provides global feedback as to the availability of memory on the system.

Esta configuración se puede cambiar sin tener que reiniciar las instancias; por tanto, se puede experimentar fácilmente para encontrar la mejor configuración para el patrón de uso.You can change these settings without restarting the instances, so you can easily experiment to find the best settings for your usage pattern.

Proporcionar la cantidad máxima de memoria a SQL ServerProviding the maximum amount of memory to SQL Server

Se puede configurar memoria hasta el límite del espacio de direcciones virtuales de proceso en todas las ediciones de SQL ServerSQL Server.Memory can be configured up to the process virtual address space limit in all SQL ServerSQL Server editions. Para obtener más información, consulte Memory Limits for Windows and Windows Server Releases (Límites de memoria para versiones de Windows y Windows Server).For more information, see Memory Limits for Windows and Windows Server Releases.

EjemplosExamples

Ejemplo A. Establecimiento de la opción de memoria de servidor máxima en 4 GBExample A. Set the max server memory option to 4 GB.

En el ejemplo siguiente se establece la opción max server memory en 4 GB.The following example sets the max server memory option to 4 GB. Tenga en cuenta que, aunque sp_configure especifica el nombre de la opción como max server memory (MB), el ejemplo muestra que se omite el elemento (MB).Note that although sp_configure specifies the name of the option as max server memory (MB), the example demonstrates omitting the (MB).

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

Esto dará como resultado una instrucción similar a la siguiente:This will output a statement similar to:

La opción de configuración "Memoria de servidor máxima (MB)" ha cambiado de 2147483647 a 4096.Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Ejecute la instrucción RECONFIGURE para instalar.Run the RECONFIGURE statement to install.

Ejemplo B: Determinación de la asignación de memoria actualExample B. Determining Current Memory Allocation

La consulta siguiente devuelve información acerca de la memoria asignada actual.The following query returns information about currently allocated memory.

SELECT 
  physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB, 
    large_page_allocations_kb/1024 AS sql_large_page_allocations_MB, 
    locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
    virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB, 
    virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB, 
    virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
    page_fault_count AS sql_page_fault_count,
    memory_utilization_percentage AS sql_memory_utilization_percentage, 
    process_physical_memory_low AS sql_process_physical_memory_low, 
    process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;  

Ejemplo C. Determinación del valor para "Memoria de servidor máxima (MB)"Example C. Determining value for 'max server memory (MB)'

La siguiente consulta devuelve información sobre el valor configurado actualmente y el que utiliza SQL Server.The following query returns information about the currently configured value and the value in use by SQL Server. Esta consulta devolverá resultados independientemente de si el valor "Mostrar opciones avanzadas" está establecido en "true".This query will return results regardless of whether 'show advanced options' is true.

SELECT c.value, c.value_in_use
FROM sys.configurations c WHERE c.[name] = 'max server memory (MB)'

Consulte tambiénSee Also

Guía de arquitectura de administración de memoria Memory Management Architecture Guide
Supervisión y optimización del rendimiento Monitor and Tune for Performance
RECONFIGURE (Transact-SQL) RECONFIGURE (Transact-SQL)
Opciones de configuración de servidor (SQL Server) Server Configuration Options (SQL Server)
sp_configure (Transact-SQL) sp_configure (Transact-SQL)
Opciones de inicio del servicio de motor de base de datos Database Engine Service Startup Options
Ediciones y características admitidas de SQL Server 2016 Editions and supported features of SQL Server 2016
Ediciones y características admitidas de SQL Server 2017 Editions and supported features of SQL Server 2017
Ediciones y características admitidas de SQL Server 2017 en Linux Editions and supported features of SQL Server 2017 on Linux
Memory Limits for Windows and Windows Server Releases (Límites de memoria para versiones de Windows y Windows Server)Memory Limits for Windows and Windows Server Releases