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.
Un grupo de recursos representa un subconjunto de recursos físicos que se pueden gobernar. De forma predeterminada, las bases de datos de SQL Server están enlazadas y consumen los recursos del grupo de recursos predeterminado. Para proteger SQL Server de tener sus recursos consumidos por una o varias tablas optimizadas para memoria y evitar que otros usuarios de memoria consuman memoria necesaria para tablas optimizadas para memoria, debe crear un grupo de recursos independiente para administrar el consumo de memoria para la base de datos con tablas optimizadas para memoria.
Una base de datos solo se puede asociar a un grupo de recursos. Sin embargo, puede enlazar varias bases de datos al mismo grupo. SQL Server permite enlazar una base de datos sin tablas optimizadas para memoria a un grupo de recursos, pero no tiene ningún efecto. Es posible que quiera enlazar una base de datos a un grupo de recursos con nombre si, en el futuro, puede crear tablas optimizadas para memoria en la base de datos.
Para poder enlazar una base de datos a un grupo de recursos, debe existir la base de datos y el grupo de recursos. El enlace surte efecto la próxima vez que se conecte la base de datos. Consulte Estados de base de datos para obtener más información.
Para obtener información sobre los grupos de recursos, consulte Grupo de recursos de Resource Governor.
Creación de la base de datos y el grupo de recursos
Puede crear la base de datos y el grupo de recursos en cualquier orden. Lo importante es que ambos existan antes de enlazar la base de datos al grupo de recursos.
Creación de la base de datos
El siguiente Transact-SQL crea una base de datos denominada IMOLTP_DB que contendrá una o varias tablas optimizadas para memoria. La ruta de acceso <driveAndPath> debe existir antes de ejecutar este comando.
CREATE DATABASE IMOLTP_DB
GO
ALTER DATABASE IMOLTP_DB ADD FILEGROUP IMOLTP_DB_fg CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE IMOLTP_DB ADD FILE( NAME = 'IMOLTP_DB_fg' , FILENAME = 'c:\data\IMOLTP_DB_fg') TO FILEGROUP IMOLTP_DB_fg;
GO
Determinación del valor mínimo para MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT
Una vez que determine las necesidades de memoria de las tablas optimizadas para memoria, debe determinar qué porcentaje de memoria disponible necesita y establecer los porcentajes de memoria en ese valor o superior.
Ejemplo:
En este ejemplo, suponemos que, a partir de tus cálculos, determinaste que tus tablas e índices optimizados para la memoria necesitan 16 GB de memoria. Supongamos que tiene 32 GB de memoria asignada para su uso.
A primera vista podría parecer que necesita establecer MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en 50 (16 es 50% de 32). Sin embargo, esto no proporcionaría suficiente memoria a las tablas optimizadas en memoria. Al examinar la tabla siguiente (porcentaje de memoria disponible para tablas e índices optimizados para memoria), vemos que si hay 32 GB de memoria confirmada, solo hay 80% disponibles para tablas e índices optimizados para memoria. Por lo tanto, calculamos los porcentajes mínimo y máximo en función de la memoria disponible, no la memoria confirmada.
memoryNeedeed = 16
memoryCommitted = 32
availablePercent = 0.8
memoryAvailable = memoryCommitted * availablePercent
percentNeeded = memoryNeeded / memoryAvailable
Sustituyendo números reales:
percentNeeded = 16 / (32 * 0.8) = 16 / 25.6 = 0.625
Por lo tanto, necesita al menos 62,5% de la memoria disponible para cumplir el requisito de 16 GB de las tablas e índices optimizados para memoria. Dado que los valores de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT deben ser enteros, los establecemos en al menos 63%.
Creación de un grupo de recursos y configuración de memoria
Al configurar la memoria para tablas optimizadas para memoria, el planeamiento de la capacidad debe realizarse en función de MIN_MEMORY_PERCENT, no en MAX_MEMORY_PERCENT. Consulte ALTER RESOURCE POOL (Transact-SQL) para obtener información sobre MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT. Esto proporciona una disponibilidad de memoria más predecible para las tablas optimizadas para memoria, ya que MIN_MEMORY_PERCENT provoca presión de memoria en otros grupos de recursos para garantizar que se cumpla. Para asegurarse de que la memoria está disponible y ayudar a evitar condiciones de memoria insuficiente, los valores de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT deben ser los mismos. Consulte Porcentaje de memoria disponible para tablas e índices optimizados para memoria a continuación para ver el porcentaje de memoria disponible para las tablas optimizadas para memoria en función de la cantidad de memoria confirmada.
Consulte Procedimientos recomendados: Uso de In-Memory OLTP en un entorno de máquina virtual para obtener más información al trabajar en un entorno de máquina virtual.
El código Transact-SQL siguiente crea un grupo de recursos denominado Pool_IMOLTP con la mitad de la memoria disponible para su uso. Una vez creado el grupo, se vuelve a configurar Resource Governor para incluir Pool_IMOLTP.
-- set MIN_MEMORY_PERCENT and MAX_MEMORY_PERCENT to the same value
CREATE RESOURCE POOL Pool_IMOLTP
WITH
( MIN_MEMORY_PERCENT = 63,
MAX_MEMORY_PERCENT = 63 );
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
Enlace de la base de datos al grupo
Use la función sp_xtp_bind_db_resource_pool del sistema para enlazar la base de datos al grupo de recursos. La función toma dos parámetros: el nombre de la base de datos y el nombre del grupo de recursos.
El siguiente Transact-SQL define un enlace de la base de datos IMOLTP_DB al grupo de recursos Pool_IMOLTP. La vinculación no se hace efectiva hasta que pongas la base de datos en línea.
EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'Pool_IMOLTP'
GO
La función del sistema sp_xtp_bind_db_resourece_pool toma dos parámetros de cadena: database_name y pool_name.
Confirmación del enlace
Confirme el enlace y anote el identificador del grupo de recursos para IMOLTP_DB. No debe ser NULL.
SELECT d.database_id, d.name, d.resource_pool_id
FROM sys.databases d
GO
Hacer que la vinculación sea efectiva
Debe desconectar la base de datos y reconectarla después de vincularla al grupo de recursos para que la vinculación surta efecto. Si la base de datos estaba enlazada a un grupo diferente anteriormente, esto quita la memoria asignada del grupo de recursos anterior y las asignaciones de memoria para la tabla optimizada para memoria y los índices provendrán ahora del grupo de recursos recién enlazado con la base de datos.
USE master
GO
ALTER DATABASE IMOLTP_DB SET OFFLINE
GO
ALTER DATABASE IMOLTP_DB SET ONLINE
GO
USE IMOLTP_DB
GO
Y ahora, la base de datos está enlazada al grupo de recursos.
Cambiar PORCENTAJE MÍNIMO DE MEMORIA y PORCENTAJE MÁXIMO DE MEMORIA en un grupo existente
Si agrega memoria adicional al servidor o la cantidad de memoria necesaria para los cambios de las tablas optimizadas para memoria, es posible que tenga que modificar el valor de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT. En los pasos siguientes se muestra cómo modificar el valor de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT en un grupo de recursos. Consulte la sección siguiente para obtener instrucciones sobre qué valores usar para MIN_MEMORY_PERCENT y 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.
Use
ALTER RESOURCE POOLpara cambiar el valor de MIN_MEMORY_PERCENT y MAX_MEMORY_PERCENT.Use
ALTER RESURCE GOVERNORpara volver a configurar el regulador de recursos con los nuevos valores.
de código de ejemplo
ALTER RESOURCE POOL Pool_IMOLTP
WITH
( MIN_MEMORY_PERCENT = 70,
MAX_MEMORY_PERCENT = 70 )
GO
-- reconfigure the Resource Governor
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Porcentaje de memoria disponible para tablas e índices optimizados para memoria
Si asigna una base de datos con tablas optimizadas para memoria y una carga de trabajo de SQL Server al mismo grupo de recursos, el Resource Governor establece un umbral interno para el uso de In-Memory OLTP, de modo que los usuarios del grupo de recursos no tengan conflictos con el uso del grupo de recursos. Por lo general, el umbral de In-Memory uso de OLTP es de aproximadamente 80% del grupo. En la tabla siguiente se muestran umbrales reales para varios tamaños de memoria.
Al crear un grupo de recursos dedicado para la base de datos OLTP de In-Memory, debe calcular la cantidad de memoria física que necesita para las tablas en memoria después de tener en cuenta las versiones de fila y el crecimiento de los datos. Una vez estimada la memoria necesaria, cree un grupo de recursos con un porcentaje de la memoria de destino de confirmación para SQL Instance, como se refleja en la columna "committed_target_kb" del DMV sys.dm_os_sys_info (consulte sys.dm_os_sys_info). Por ejemplo, puede crear un grupo de recursos P1 con 40% de la memoria total disponible para la instancia. De estos 40%, el motor OLTP de In-Memory obtiene un porcentaje más reducido para almacenar datos OLTP de In-Memory. Esto se hace para asegurarse de que In-Memory OLTP no consume toda la memoria de este grupo. Este valor del porcentaje más pequeño depende de la memoria comprometida del objetivo. En la tabla siguiente se describe la memoria disponible para la base de datos OLTP In-Memory en un grupo de recursos (con nombre o predeterminado) antes de generar un error de OOM.
| Memoria reservada de objetivo | Porcentaje disponible para tablas en memoria |
|---|---|
| <= 8 GB | 70% |
| <= 16 GB | 75 % |
| <= 32 GB | 80% |
| <= 96 GB | 85% |
| >96 GB | 90 % |
Por ejemplo, si la "memoria confirmada de destino" es de 100 GB y calcula que las tablas e índices optimizados para memoria necesitan 60 GB de memoria, entonces, puede crear un grupo de recursos con MAX_MEMORY_PERCENT = 67 (60 GB necesarios / 0,90 = 66,667 GB, redondeado a 67 GB; 67 GB / 100 GB instalada = 67%) para asegurarse de que los objetos OLTP de In-Memory tienen los 60 GB que necesitan.
Una vez enlazada una base de datos a un grupo de recursos con nombre, use la siguiente consulta para ver las asignaciones de memoria en distintos grupos de recursos.
SELECT pool_id
, Name
, min_memory_percent
, max_memory_percent
, max_memory_kb/1024 AS max_memory_mb
, used_memory_kb/1024 AS used_memory_mb
, target_memory_kb/1024 AS target_memory_mb
FROM sys.dm_resource_governor_resource_pools
En esta salida de ejemplo se muestra que la memoria que toman los objetos optimizados para memoria es de 1356 MB en el grupo de recursos, PoolIMOLTP, con un límite superior de 2307 MB. Este límite superior controla la memoria total que pueden tomar los objetos optimizados para memoria del usuario y del sistema asignados a este grupo.
Salida de ejemplo
Esta salida procede de la base de datos y las tablas que hemos creado anteriormente.
pool_id Name min_memory_percent max_memory_percent max_memory_mb used_memory_mb target_memory_mb
----------- ----------- ------------------ ------------------ ------------- -------------- ----------------
1 internal 0 100 3845 125 3845
2 default 0 100 3845 32 3845
259 PoolIMOLTP 0 100 3845 1356 2307
Para obtener más información, vea sys.dm_resource_governor_resource_pools (Transact-SQL).
Si no enlaza la base de datos a un grupo de recursos con nombre, se enlaza al grupo "predeterminado". Dado que SQL Server usa el grupo de recursos predeterminado para la mayoría de las otras asignaciones, no podrá supervisar la memoria consumida por las tablas optimizadas para memoria mediante la DMV sys.dm_resource_governor_resource_pools con precisión para la base de datos de interés.
Véase también
sys.sp_xtp_bind_db_resource_pool (Transact-SQL)
sys.sp_xtp_unbind_db_resource_pool (Transact-SQL)
Regulador de recursos
Grupo de recursos de servidor del regulador de recursos
Crear un grupo de recursos de servidor
Cambiar la configuración del grupo de recursos de servidor
Eliminación de un grupo de recursos