Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
SQL Server In-Memory OLTP consomme de la mémoire dans des modèles différents des tables sur disque. Vous pouvez surveiller la quantité de mémoire allouée et utilisée par les tables et index optimisés pour la mémoire dans votre base de données à l’aide des vues de gestion dynamique (DMV) ou des compteurs de performance fournis pour la mémoire et le sous-système de ramasse-miettes. Cela vous donne une visibilité au niveau du système et de la base de données et vous permet d’éviter les problèmes en raison de l’épuisement de la mémoire.
Cette rubrique traite de la surveillance de votre utilisation de la mémoire OLTP In-Memory.
Créer un exemple de base de données avec des tables mémoire optimisées
Vous pouvez ignorer cette section si vous disposez déjà d’une base de données avec des tables mémoire optimisées.
Les étapes suivantes créent une base de données avec trois tables mémoire optimisées que vous pouvez utiliser dans le reste de cette rubrique. Dans l’exemple, nous avons mappé la base de données à un pool de ressources afin de pouvoir contrôler la quantité de mémoire que peuvent prendre les tables optimisées en mémoire.
Lancez SQL Server Management Studio.
Cliquez sur Nouvelle requête.
Collez ce code dans la nouvelle fenêtre de requête et exécutez chaque section.
-- create a database to be used CREATE DATABASE IMOLTP_DB GO ALTER DATABASE IMOLTP_DB ADD FILEGROUP IMOLTP_DB_xtp_fg CONTAINS MEMORY_OPTIMIZED_DATA ALTER DATABASE IMOLTP_DB ADD FILE( NAME = 'IMOLTP_DB_xtp' , FILENAME = 'C:\Data\IMOLTP_DB_xtp') TO FILEGROUP IMOLTP_DB_xtp_fg; GO USE IMOLTP_DB GO -- create the resoure pool CREATE RESOURCE POOL PoolIMOLTP WITH (MAX_MEMORY_PERCENT = 60); ALTER RESOURCE GOVERNOR RECONFIGURE; GO -- bind the database to a resource pool EXEC sp_xtp_bind_db_resource_pool 'IMOLTP_DB', 'PoolIMOLTP' -- you can query the binding using the catalog view as described here SELECT d.database_id , d.name , d.resource_pool_id FROM sys.databases d GO -- take database offline/online to finalize the binding to the resource pool USE master GO ALTER DATABASE IMOLTP_DB SET OFFLINE GO ALTER DATABASE IMOLTP_DB SET ONLINE GO -- create some tables USE IMOLTP_DB GO -- create table t1 CREATE TABLE dbo.t1 ( c1 int NOT NULL CONSTRAINT [pk_t1_c1] PRIMARY KEY NONCLUSTERED , c2 char(40) NOT NULL , c3 char(8000) NOT NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) GO -- load t1 150K rows DECLARE @i int = 0 BEGIN TRAN WHILE (@i <= 150000) BEGIN INSERT t1 VALUES (@i, 'a', replicate ('b', 8000)) SET @i += 1; END Commit GO -- Create another table, t2 CREATE TABLE dbo.t2 ( c1 int NOT NULL CONSTRAINT [pk_t2_c1] PRIMARY KEY NONCLUSTERED , c2 char(40) NOT NULL , c3 char(8000) NOT NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) GO -- Create another table, t3 CREATE TABLE dbo.t3 ( c1 int NOT NULL CONSTRAINT [pk_t3_c1] PRIMARY KEY NONCLUSTERED HASH (c1) WITH (BUCKET_COUNT = 1000000) , c2 char(40) NOT NULL , c3 char(8000) NOT NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) GO
Surveillance de l’utilisation de la mémoire
Utilisation de SQL Server Management Studio
SQL Server 2014 est fourni avec des rapports standard intégrés pour surveiller la mémoire consommée par les tables en mémoire. Vous pouvez accéder à ces rapports à l’aide de l’Explorateur d’objets. Vous pouvez également utiliser l’Explorateur d’objets pour surveiller la mémoire consommée par des tables optimisées en mémoire individuelle.
Consommation au niveau de la base de données
Vous pouvez surveiller l’utilisation de la mémoire au niveau de la base de données comme suit.
Lancez SQL Server Management Studio et connectez-vous à un serveur.
Dans l’Explorateur d’objets, cliquez avec le bouton droit sur la base de données sur laquelle vous souhaitez créer des rapports.
Dans le menu contextuel, sélectionnez Rapports ->Rapports standard ->Utilisation de la mémoire par objets optimisés en mémoire
Ce rapport montre la consommation de mémoire par la base de données que nous avons créée ci-dessus.
Utilisation de DMV
Il existe un certain nombre de DMV disponibles pour surveiller la mémoire consommée par les tables optimisées en mémoire, les index, les objets système et les structures d’exécution.
Consommation de mémoire par les tables et index mémoire optimisés
Vous pouvez trouver la consommation de mémoire pour toutes les tables utilisateur, index et objets système en interrogeant sys.dm_db_xtp_table_memory_stats comme indiqué ici.
SELECT object_name(object_id) AS Name
, *
FROM sys.dm_db_xtp_table_memory_stats
Exemple de sortie
Name object_id memory_allocated_for_table_kb memory_used_by_table_kb memory_allocated_for_indexes_kb memory_used_by_indexes_kb
---------- ----------- ----------------------------- ----------------------- ------------------------------- -------------------------
t3 629577281 0 0 128 0
t1 565577053 1372928 1200008 7872 1942
t2 597577167 0 0 128 0
NULL -6 0 0 2 2
NULL -5 0 0 24 24
NULL -4 0 0 2 2
NULL -3 0 0 2 2
NULL -2 192 25 16 16
Pour plus d’informations, consultez sys.dm_db_xtp_table_memory_stats.
Consommation de mémoire par des structures système internes
La mémoire est également consommée par les objets système, comme les structures transactionnelles, les tampons pour les données et les fichiers delta, les structures de ramasse-miettes, etc. Vous pouvez trouver la mémoire utilisée pour ces objets système en interrogeant sys.dm_xtp_system_memory_consumers comme indiqué ici.
SELECT memory_consumer_desc
, allocated_bytes/1024 AS allocated_bytes_kb
, used_bytes/1024 AS used_bytes_kb
, allocation_count
FROM sys.dm_xtp_system_memory_consumers
Exemple de sortie
memory_consumer_ desc allocated_bytes_kb used_bytes_kb allocation_count
------------------------- -------------------- -------------------- ----------------
VARHEAP 0 0 0
VARHEAP 384 0 0
DBG_GC_OUTSTANDING_T 64 64 910
ACTIVE_TX_MAP_LOOKAS 0 0 0
RECOVERY_TABLE_CACHE 0 0 0
RECENTLY_USED_ROWS_L 192 192 261
RANGE_CURSOR_LOOKSID 0 0 0
HASH_CURSOR_LOOKASID 128 128 455
SAVEPOINT_LOOKASIDE 0 0 0
PARTIAL_INSERT_SET_L 192 192 351
CONSTRAINT_SET_LOOKA 192 192 646
SAVEPOINT_SET_LOOKAS 0 0 0
WRITE_SET_LOOKASIDE 192 192 183
SCAN_SET_LOOKASIDE 64 64 31
READ_SET_LOOKASIDE 0 0 0
TRANSACTION_LOOKASID 448 448 156
PGPOOL:256K 768 768 3
PGPOOL: 64K 0 0 0
PGPOOL: 4K 0 0 0
Pour plus d’informations , consultez sys.dm_xtp_system_memory_consumers (Transact-SQL).
Consommation de mémoire au moment de l’exécution lors de l’accès aux tables mémoire optimisées
Vous pouvez déterminer la mémoire consommée par les structures d’exécution, telles que le cache de procédures avec la requête suivante : exécutez cette requête pour obtenir la mémoire utilisée par les structures d’exécution telles que pour le cache de procédure. Toutes les structures d’exécution sont marquées avec XTP.
SELECT memory_object_address
, pages_in_bytes
, bytes_used
, type
FROM sys.dm_os_memory_objects WHERE type LIKE '%xtp%'
Exemple de sortie
memory_object_address pages_ in_bytes bytes_used type
--------------------- ------------------- ---------- ----
0x00000001F1EA8040 507904 NULL MEMOBJ_XTPDB
0x00000001F1EAA040 68337664 NULL MEMOBJ_XTPDB
0x00000001FD67A040 16384 NULL MEMOBJ_XTPPROCCACHE
0x00000001FD68C040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD284040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD302040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD382040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD402040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD482040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD502040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001FD67E040 16384 NULL MEMOBJ_XTPPROCPARTITIONEDHEAP
0x00000001F813C040 8192 NULL MEMOBJ_XTPBLOCKALLOC
0x00000001F813E040 16842752 NULL MEMOBJ_XTPBLOCKALLOC
Pour plus d’informations, consultez sys.dm_os_memory_objects (Transact-SQL).
Mémoire consommée par In-Memory moteur OLTP sur l’instance
La mémoire allouée au moteur OLTP In-Memory et les objets à mémoire optimisée sont gérés de la même façon que tout autre consommateur de mémoire au sein d’une instance SQL Server. Les gestionnaires de type MEMORYCLERK_XTP représentent toute la mémoire allouée au moteur OLTP In-Memory. Utilisez la requête suivante pour rechercher toutes les mémoires utilisées par le moteur OLTP In-Memory.
-- this DMV accounts for all memory used by the hek_2 engine
SELECT type
, name
, memory_node_id
, pages_kb/1024 AS pages_MB
FROM sys.dm_os_memory_clerks WHERE type LIKE '%xtp%'
L’exemple de sortie indique que la mémoire totale allouée est de 18 Mo de consommation de mémoire au niveau du système et de 1358 Mo allouée à l’ID de base de données 5. Étant donné que cette base de données est mappée à un pool de ressources dédié, cette mémoire est prise en compte dans ce pool de ressources.
Exemple de sortie
type name memory_node_id pages_MB
-------------------- ---------- -------------- --------------------
MEMORYCLERK_XTP Default 0 18
MEMORYCLERK_XTP DB_ID_5 0 1358
MEMORYCLERK_XTP Default 64 0
Pour plus d’informations, consultez sys.dm_os_memory_clerks (Transact-SQL).
Gestion de la mémoire consommée par les objets à mémoire optimisée
Vous pouvez contrôler la mémoire totale consommée par les tables optimisées en mémoire en la liant à un pool de ressources nommé, comme décrit dans la rubrique Lier une base de données avec Memory-Optimized tables à un pool de ressources.
Résolution des problèmes de mémoire
La résolution des problèmes de mémoire est un processus en trois étapes :
Identifiez la quantité de mémoire consommée par les objets dans votre base de données ou dans votre instance. Vous pouvez utiliser un ensemble complet d’outils de surveillance disponibles pour les tables mémoire optimisées, comme décrit précédemment. Par exemple, les DMVs
sys.dm_db_xtp_table_memory_statsousys.dm_os_memory_clerks.Déterminez comment évolue la consommation de mémoire et combien de marge vous avez encore. En surveillant régulièrement la consommation de mémoire, vous pouvez savoir comment l’utilisation de la mémoire augmente. Par exemple, si vous avez mappé la base de données à un pool de ressources nommé, vous pouvez surveiller le compteur de performances Mémoire utilisée (Ko) pour voir comment l’utilisation de la mémoire augmente.
Prenez des mesures pour atténuer les problèmes de mémoire potentiels. Pour plus d’informations, consultez Résoudre les problèmes de mémoire insuffisante.
Voir aussi
Lier une base de données avec des tables Memory-Optimized à une modification de pool de ressources MIN_MEMORY_PERCENT et MAX_MEMORY_PERCENT sur un pool existant