Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
OLTP en memoria usa más memoria y de maneras diferentes que SQL Server. Es posible que la cantidad de memoria que instaló y asignó para OLTP en memoria no sea suficiente para sus necesidades en crecimiento. En ese caso, podría quedarse sin memoria. En este tema se describe cómo recuperarse de una situación de OOM (memoria insuficiente). Consulte Supervisar y solucionar problemas del uso de la memoria para obtener orientación que pueda ayudarle a evitar muchas situaciones de OOM.
Contenido de este tema
| Tema | Información general |
|---|---|
| Resolver errores de restauración de la base de datos causados por falta de memoria (OOM) | Se indica lo que debe hacer si aparece el mensaje de error "Error en la operación de restauración para la base de datos ‘<NombreDeBaseDeDatos>’ debido a memoria insuficiente en el grupo de recursos de servidor ‘<nombreDeGrupoDeRecursos>’". |
| Solucionar el impacto de las condiciones de memoria insuficiente o de OOM en la carga de trabajo | Qué hacer si ves que los problemas de baja memoria están afectando negativamente al rendimiento. |
| Resolver los errores de asignación de páginas debidos a memoria insuficiente cuando hay suficiente memoria disponible | Se indica lo que debe hacer si aparece el mensaje de error "No se permiten asignaciones de páginas para la base de datos ‘<nombreDeBaseDeDatos>’ debido a memoria insuficiente en el grupo de recursos ‘<nombreDeGrupoDeRecursos>’”. ..." cuando hay suficiente memoria disponible para la operación. |
| Prácticas recomendadas: usar OLTP en memoria en un entorno de máquinas virtuales | Qué debe tener en cuenta al usar OLTP en memoria en un entorno virtualizado. |
Resolver errores de restauración de bases de datos debidos a memoria insuficiente
Cuando intente restaurar una base de datos, es posible que obtenga el mensaje de error: "Error en la operación de restauración para la base de datos ‘<NombreBasedeDatos>’ debido a que la memoria es insuficiente en el grupo de recursos ‘<NombreGrupoRecursos>’". Esto indica que el servidor no tiene suficiente memoria disponible para restaurar la base de datos.
El servidor en el que restaura una base de datos debe tener suficiente memoria disponible para las tablas optimizadas para memoria en la copia de seguridad de la base de datos; de lo contrario, la base de datos no se conectará y se marcará como sospechosa.
Si el servidor tiene suficiente memoria física, pero todavía aparece este error, es posible que otros procesos estén utilizando demasiada memoria o un problema de configuración hace que no haya suficiente memoria disponible para la restauración. Para esta clase de problemas, lleve a cabo las siguientes medidas para que haya más memoria disponible para la operación de restauración:
Cierre provisionalmente las aplicaciones en ejecución.
Al cerrar una o varias aplicaciones en ejecución o detener servicios que no se necesiten en el momento, dejará libre la memoria que están usando para la operación de restauración. Puede reiniciarlas una vez haya completado correctamente la restauración.Aumente el valor de MAX_MEMORY_PERCENT.
Si la base de datos está enlazada a un grupo de recursos, que es la práctica recomendada, la memoria disponible para restaurar se rige por MAX_MEMORY_PERCENT. Si el valor es demasiado bajo, se producirá un error en la restauración. Este fragmento de código cambia el valor MAX_MEMORY_PERCENT para el grupo de recursos de servidor PoolHk y lo establece en el 70 % de la memoria instalada.Importante
Si el servidor se está ejecutando en una máquina virtual y no está dedicado, establezca el valor de MIN_MEMORY_PERCENT en el mismo valor que MAX_MEMORY_PERCENT.
Vea el tema Prácticas recomendadas: usar OLTP en memoria en un entorno de máquinas virtuales 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 GOPara obtener información sobre los valores máximos para MAX_MEMORY_PERCENT, vea la sección del tema Porcentaje de memoria disponible para tablas e índices optimizados para memoria.
Aumente la memoria máxima del servidor.
Para obtener información acerca de cómo configurar memoria de servidor máxima, vea el tema Opciones de configuración de memoria del servidor.
Resolver el impacto de las condiciones de memoria insuficiente u OOM en la carga de trabajo
Evidentemente, lo mejor es evitar una situación de poca memoria o de OOM (falta de memoria). Un planeamiento y supervisión adecuados puede ayudar a evitar situaciones OOM. Aún así, incluso el mejor planeamiento no siempre puede prever lo que sucede en realidad y podría terminar con un problema de memoria insuficiente u OOM. Hay dos pasos para recuperarse de OOM:
Abrir una DAC (conexión de administrador dedicada)
SQL Server ofrece una conexión de administrador dedicada (DAC). La DAC permite a los administradores acceder a una instancia en ejecución del motor de base de datos de SQL Server para solucionar problemas en el servidor, aunque el servidor no responda a otras conexiones de cliente. La DAC está disponible a través de la utilidad sqlcmd y SQL Server Management Studio.
Para obtener instrucciones sobre el uso de DAC a través de SSMS o sqlcmd, consulte Conexión de diagnóstico para administradores de bases de datos.
Tomar una acción correctora
Para resolver la condición OOM, necesita liberar memoria ya en uso reduciendo el consumo, o hacer que haya más memoria disponible para sus tablas en memoria.
Libere memoria existente
Elimine las filas no esenciales de la tabla optimizada para memoria y espere a la recolección de basura
Puede quitar filas no esenciales de una tabla con optimización para memoria. El recolector de basura devuelve a la memoria disponible la memoria utilizada por estas filas. El motor de OLTP en memoria elimina las filas obsoletas de forma agresiva. 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 fila creadas debido a operaciones de actualización o eliminación mientras la transacción estaba activa no se pueden eliminar mediante el recolector de basura.
Mover una o varias filas a una tabla basada en disco
Los siguientes artículos de TechNet proporcionan instrucciones para mover filas de una tabla optimizada para memoria a una tabla basada en disco.
Aumente la cantidad de memoria disponible
Aumente el valor de MAX_MEMORY_PERCENT en el grupo de recursos
Si no ha creado un grupo de recursos con nombre para sus tablas en memoria, debe hacerlo y vincular sus bases de datos de OLTP en memoria a él. Vea el tema Enlazar una base de datos con tablas con optimización para memoria a un grupo de recursos de servidor para obtener instrucciones sobre cómo crear y enlazar sus bases de datos de OLTP en memoria a un grupo de recursos.
Si la base de datos de OLTP en memoria está enlazada a un grupo de recursos de servidor, es posible que pueda aumentar el porcentaje de memoria a la que puede tener acceso el grupo. Vea el subtema 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 de un grupo de recursos.
Aumente el valor de MAX_MEMORY_PERCENT.
Este fragmento de código cambia el valor MAX_MEMORY_PERCENT para el grupo de recursos de servidor PoolHk y lo establece en el 70 % de la memoria instalada.
Importante
Si el servidor se está ejecutando en una máquina virtual y no está dedicado, establezca el valor de MIN_MEMORY_PERCENT en el mismo valor que MAX_MEMORY_PERCENT.
Vea el tema Prácticas recomendadas: usar OLTP en memoria en un entorno de máquinas virtuales 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 to enabled it
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Para obtener información sobre los valores máximos para MAX_MEMORY_PERCENT, vea la sección del tema Porcentaje de memoria disponible para tablas e índices optimizados para memoria.
Instale memoria adicional
En última instancia, si es posible, la mejor solución es instalar memoria física adicional. Si lo hace, recuerde que seguramente también podrá aumentar el valor de MAX_MEMORY_PERCENT (vea el subtema Cambiar MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en un grupo existente), ya que SQL Server probablemente no necesitará más memoria, lo que permitirá asignar toda o gran parte de la memoria nueva instalada al grupo de recursos de servidor.
Importante
Si el servidor se está ejecutando en una máquina virtual y no está dedicado, establezca el valor de MIN_MEMORY_PERCENT en el mismo valor que MAX_MEMORY_PERCENT.
Vea el tema Prácticas recomendadas: usar OLTP en memoria en un entorno de máquinas virtuales para obtener más información.
Resolver los errores de asignación de páginas debidos a memoria insuficiente cuando hay suficiente memoria disponible
Si recibe el mensaje de error Disallowing page allocations for database '*\<databaseName>*' due to insufficient memory in the resource pool '*\<resourcePoolName>*'. See 'https://go.microsoft.com/fwlink/?LinkId=330673' for more information. en el registro de errores cuando la memoria física disponible es suficiente para asignar la página, puede deberse a que Resource Governor esté deshabilitado. Cuando el Administrador de recursos está desactivado, MEMORYBROKER_FOR_RESERVE provoca una presión de memoria artificial.
Para resolver este problema necesita habilitar el Regulador de recursos.
Vea Habilitar el regulador de recursos para obtener información sobre los límites y las restricciones, así como instrucciones para habilitar el Regulador de recursos mediante el Explorador de objetos, propiedades del Regulador de recursos o Transact-SQL.
Prácticas recomendadas: usar OLTP en memoria en un entorno de máquinas virtuales
La virtualización del servidor puede ayudar a reducir la inversión y los costos operativos de TI y aumentar la eficacia de TI con mejores procesos de aprovisionamiento, mantenimiento, disponibilidad, copia de seguridad y recuperación. Con los avances tecnológicos recientes, es más fácil consolidar cargas de trabajo de base de datos complejas gracias a la virtualización. En este tema se tratan las prácticas recomendadas para usar OLTP en memoria de SQL Server en un entorno virtualizado.
Asignación previa de memoria
Respecto a la memoria en un entorno virtualizado, son aspectos esenciales un mejor rendimiento y mayor compatibilidad. Debe ser capaz de asignar memoria rápidamente a las máquinas virtuales en función de sus requisitos (cargas pico y fuera de horas pico) y asegurarse de que la memoria no se desperdicia. La característica de memoria dinámica de Hyper-V aumenta la agilidad de cómo se asigna y administra la memoria entre las máquinas virtuales que se ejecutan en un host.
Es necesario modificar algunas prácticas recomendadas para virtualizar y administrar SQL Server cuando se virtualiza una base de datos con tablas optimizadas para memoria. Sin tablas optimizadas para memoria, dos de los procedimientos recomendados son:
- Si se utiliza memoria de servidor mínima, es mejor asignar únicamente la cantidad de memoria que se necesita para que haya memoria suficiente para otros procesos (evitando de esta forma la paginación).
- No establecer un valor demasiado alto de asignación previa de memoria. De lo contrario, puede que otros procesos no obtengan memoria suficiente cuando la necesiten, y esto puede producir paginación de memoria.
Si sigue los procedimientos anteriores para una base de datos con tablas optimizadas para memoria, el intento de restaurar y recuperar una base de datos podría dar lugar a que esta pasara a un estado "Pendiente de recuperación", incluso si hay memoria suficiente para recuperarla. El motivo es que, al iniciarse, In-Memory OLTP carga los datos en memoria de forma más agresiva de lo que la asignación dinámica de memoria asigna memoria a la base de datos.
Solución
Para mitigar este problema, asigne previamente memoria suficiente a la base de datos para recuperar o reiniciar la base de datos; no especifique un valor mínimo confiando en que la memoria dinámica proporcionará memoria adicional cuando sea necesario.
Contenido relacionado
- Administrar memoria para OLTP en memoria
- Supervisión y solución de problemas de uso de memoria con OLTP en memoria
- Vincular una base de datos con tablas optimizadas para memoria a un grupo de recursos
- Guía de arquitectura de administración de memoria
- Opciones de configuración de la memoria del servidor