Compartir a través de


Resolver problemas de memoria insuficiente

SQL Server In-Memory OLTP usa más memoria y de diferentes maneras que SQL Server. Es posible que la cantidad de memoria instalada y asignada para In-Memory OLTP sea inadecuada para sus crecientes necesidades. Si es así, podría quedar sin memoria. En este tema se explica cómo recuperarse de una situación de OOM. Consulte Supervisión y solución de problemas de uso de memoria para obtener instrucciones que pueden ayudarle a evitar muchas situaciones de OOM.

Tratado en este tema

Tema Información general
Resolución de errores de restauración de bases de datos debido a OOM Qué hacer si recibe el mensaje de error "Error en la operación de restauración de la base de datos '<databaseName>' debido a una memoria insuficiente en el grupo de recursos '<resourcePoolName>'".
Resolución del impacto de las condiciones de memoria baja o OOM en la carga de trabajo Qué hacer si encuentra problemas de memoria baja afecta negativamente al rendimiento.
Resolución de errores de asignación de páginas debido a una memoria insuficiente cuando hay suficiente memoria disponible Qué hacer si recibe el mensaje de error "No permitir asignaciones de páginas para la base de datos "<databaseName>" debido a una memoria insuficiente en el grupo de recursos "<resourcePoolName>". ..." cuando la memoria disponible es suficiente para la operación.

Resolución de errores de restauración de bases de datos debido a OOM

Al intentar restaurar una base de datos, puede recibir el mensaje de error: "Error en la operación de restauración de la base de datos '<databaseName>' debido a una memoria insuficiente en el grupo de recursos '<resourcePoolName>'". Para poder restaurar correctamente la base de datos, debe resolver el problema de memoria insuficiente haciendo que haya más memoria disponible.

Para resolver el error de recuperación debido a un aumento de la memoria disponible OOM mediante cualquiera de estos medios o al para aumentar temporalmente la memoria disponible para la operación de recuperación.

  • Cierre temporalmente las aplicaciones en ejecución.
    Al cerrar una o varias aplicaciones en ejecución, como Visual Studio, Internet Explorer, OneNote y otros, hace que la memoria que estaban usando esté disponible para la operación de restauración. Puede reiniciarlos tras la restauración exitosa.

  • Aumente el valor de MAX_MEMORY_PERCENT.
    Este fragmento de código cambia MAX_MEMORY_PERCENT del grupo de recursos PoolHk a 70% de memoria instalada.

    Importante

    Si el servidor se ejecuta en una máquina virtual y no está dedicado, establezca el valor de MIN_MEMORY_PERCENT en el mismo valor que MAX_MEMORY_PERCENT.
    Consulte el tema Procedimientos recomendados: Uso de In-Memory OLTP en un entorno de máquina virtual para obtener más información.

    
    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    Para obtener información sobre los valores máximos de MAX_MEMORY_PERCENT vea la sección porcentaje de memoria disponible para tablas e índices optimizados para memoria.

  • Vuelva a configurar la memoria máxima del servidor.
    Para obtener información sobre cómo configurar la memoria máxima del servidor , consulte el tema Optimización del rendimiento del servidor mediante las opciones de configuración de memoria.

Resolución del impacto de las condiciones de memoria baja o OOM en la carga de trabajo

Obviamente, es mejor no entrar en una situación de memoria baja o OOM (memoria insuficiente). Una buena planificación y supervisión puede ayudar a evitar situaciones de OOM. Sin embargo, la mejor planificación no siempre prevé lo que sucede realmente y puede acabar con poca memoria o OOM. Hay dos pasos para recuperarse de OOM:

  1. Abrir una DAC (conexión de administrador dedicada)

  2. Tomar medidas correctivas

Abrir una DAC (conexión de administrador dedicada)

Microsoft SQL Server proporciona una conexión de administrador dedicada (DAC). La DAC permite a un administrador acceder a una instancia en ejecución del motor de base de datos de SQL Server para solucionar problemas en el servidor, incluso cuando el servidor no responde a otras conexiones de cliente. La DAC está disponible a través de la sqlcmd utilidad y SQL Server Management Studio (SSMS).

Para obtener instrucciones sobre el uso sqlcmd y la DAC, consulte Uso de una conexión de administrador dedicada. Para obtener instrucciones sobre el uso de DAC a través de SSMS, consulte How to: Use the Dedicated Administrator Connection with SQL Server Management Studio (Cómo: Usar la conexión de administrador dedicado con SQL Server Management Studio).

Tomar medidas correctivas

Para resolver la condición de OOM, debe liberar memoria existente mediante la reducción del uso o hacer que haya más memoria disponible para las tablas en memoria.

Liberar memoria existente

Eliminar las filas no esenciales de la tabla optimizadas para memoria y esperar a la recolección de basura

Puede quitar filas no esenciales de una tabla optimizada para memoria. El recolector de basura devuelve la memoria usada por estas filas a la memoria disponible. . El motor OLTP en memoria recopila filas basura agresivamente. Sin embargo, una transacción de larga duración puede impedir la recolección de basura. Por ejemplo, si tiene una transacción que se ejecuta durante 5 minutos, las versiones de filas creadas debido a operaciones de actualización y eliminación mientras la transacción estaba activa no se pueden recoger los elementos no utilizados.

Mover una o varias filas a una tabla basada en disco

Los siguientes artículos de TechNet proporcionan instrucciones sobre cómo mover filas de una tabla optimizada para memoria a una tabla basada en disco.

Aumento de la memoria disponible

Aumento del valor de MAX_MEMORY_PERCENT en el grupo de recursos

Si no ha creado un grupo de recursos con nombre para las tablas en memoria, debe hacerlo y enlazar las bases de datos OLTP de In-Memory a ella. Consulte el tema Enlazar una base de datos con tablas de Memory-Optimized a un grupo de recursos para obtener instrucciones sobre cómo crear y enlazar las bases de datos OLTP de In-Memory a un grupo de recursos.

Si la base de datos OLTP de In-Memory está enlazada a un grupo de recursos, es posible que pueda aumentar el porcentaje de memoria a la que puede acceder el grupo. Consulte el subproceso Cambiar MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en un grupo existente para obtener instrucciones sobre cómo cambiar el valor de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT para un grupo de recursos.

Aumente el valor de MAX_MEMORY_PERCENT.
Este fragmento de código cambia MAX_MEMORY_PERCENT del grupo de recursos PoolHk a 70% de memoria instalada.

Importante

Si el servidor se ejecuta en una máquina virtual y no está dedicado, establezca el valor de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en el mismo valor.
Consulte el tema Procedimientos recomendados: Uso de In-Memory OLTP en un entorno de máquina virtual para obtener más información.

  
-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor  
--    RECONFIGURE enables resource governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  
  

Para obtener información sobre los valores máximos de MAX_MEMORY_PERCENT vea la sección Porcentaje de memoria disponible para tablas e índices optimizados para memoria.

Instalación de memoria adicional

En última instancia, la mejor solución, si es posible, consiste en instalar memoria física adicional. Si lo hace, recuerde que probablemente también podrá aumentar el valor de MAX_MEMORY_PERCENT (consulte el subproceso Cambiar MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en un grupo de recursos existente), ya que ES probable que SQL Server no necesite más memoria, lo que le permite obtener la mayor cantidad de memoria si no toda la memoria recién instalada disponible para el grupo de recursos.

Importante

Si el servidor se ejecuta en una máquina virtual y no está dedicado, establezca el valor de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en el mismo valor.
Consulte el tema Procedimientos recomendados: Uso de In-Memory OLTP en un entorno de máquina virtual para obtener más información.

Resolución de errores de asignación de páginas debido a una memoria insuficiente cuando hay suficiente memoria disponible

Si recibe el mensaje de error "No permitir asignaciones de páginas para la base de datos "<databaseName>" debido a una memoria insuficiente en el grupo de recursos "<resourcePoolName>". Consulte 'https://go.microsoft.com/fwlink/?LinkId=330673' para obtener más información." en el registro de errores cuando la memoria física disponible es suficiente para asignar la página, puede deberse a un regulador de recursos deshabilitado. Cuando el Administrador de Recursos está deshabilitado, MEMORYBROKER_FOR_RESERVE induce presión de memoria artificial.

Para resolver esto, necesita habilitar el Resource Governor.

Consulte Habilitación del regulador de recursos para obtener información sobre los límites y restricciones, así como instrucciones sobre cómo habilitar Resource Governor mediante el Explorador de objetos, las propiedades de Resource Governor o Transact-SQL.

Véase también

Administración de memoria para In-Memory OLTP
Supervisión y solución de problemas de uso de memoria
Enlazar una base de datos con tablas de Memory-Optimized a un grupo de recursos
Procedimientos recomendados: Uso de In-Memory OLTP en un entorno de máquina virtual