Partager via


sys.dm_exec_query_memory_grants (Transact-SQL)

Retourne des informations concernant les requêtes qui ont acquis une allocation de mémoire ou qui requièrent encore une allocation de mémoire pour s'exécuter. Les requêtes qui n'ont pas besoin d'attendre une allocation de mémoire n'apparaissent pas dans cette vue.

Nom de la colonne

Type de données

Description

session_id

smallint

ID (SPID) de la session sur laquelle cette requête s'exécute.

request_id

int

ID de la demande. Unique dans le contexte de la session.

scheduler_id

int

ID du planificateur qui planifie cette requête.

dop

smallint

Degré de parallélisme de cette requête.

request_time

datetime

Date et heure auxquelles cette requête a demandé l'allocation de mémoire.

grant_time

datetime

Date et heure auxquelles la mémoire a été allouée à cette requête. NULL si la mémoire n'a pas encore été allouée.

requested_memory_kb

bigint

Quantité totale de mémoire demandée, en kilo-octets.

granted_memory_kb

bigint

Quantité totale de mémoire réellement allouée, en kilo-octets. Peut être NULL si la mémoire n'a pas encore été allouée. Dans une situation normale, cette valeur doit être identique à requested_memory_kb. Pour la création d'index, le serveur peut autoriser l'allocation de mémoire à la demande supplémentaire au-delà de la mémoire allouée initialement.

required_memory_kb

bigint

Mémoire minimale requise pour exécuter cette requête, en kilo-octets. requested_memory_kb est supérieur ou égal à cette quantité.

used_memory_kb

bigint

Mémoire physique utilisée à ce moment précis, en kilo-octets.

max_used_memory_kb

bigint

Mémoire physique maximale utilisée jusqu'à ce moment, en kilo-octets.

query_cost

float

Coût estimé de la requête.

timeout_sec

int

Délai d'attente (en secondes) avant que cette requête abandonne la demande d'allocation de mémoire.

resource_semaphore_id

smallint

ID non unique du sémaphore de ressource sur lequel cette requête attend.

RemarqueRemarque
Cet ID est unique dans les versions de SQL Server antérieures à SQL Server 2008. Cette modification peut affecter l'exécution de la requête de résolution des problèmes. Pour plus d'informations, consultez la section « Remarques », plus loin dans cette rubrique.

queue_id

smallint

ID de la file d'attente où cette requête attend les allocations de mémoire. NULL si la mémoire a déjà été allouée.

wait_order

int

Ordre séquentiel des requêtes en attente dans le queue_id spécifié. Cette valeur peut changer pour une requête donnée si d'autres requêtes obtiennent des allocations de mémoire ou dépassent leur délai d'attente. NULL si la mémoire a déjà été allouée.

is_next_candidate

bit

Candidat à la prochaine allocation de mémoire.

1 = Oui

0 = Non

NULL = la mémoire a déjà été allouée.

wait_time_ms

bigint

Temps d'attente en millisecondes. NULL si la mémoire a déjà été allouée.

plan_handle

varbinary(64)

Identificateur de ce plan de requête. Utilisez sys.dm_exec_query_plan pour extraire le plan XML réel.

sql_handle

varbinary(64)

Identificateur du texte Transact-SQL pour cette requête. Utilisez sys.dm_exec_sql_text pour obtenir le texte Transact-SQL réel.

group_id

int

ID du groupe de charges de travail sur lequel cette requête s'exécute.

pool_id

int

ID du pool de ressources auquel ce groupe de charges de travail appartient.

is_small

tinyint

Lorsque ce paramètre a la valeur 1, indique que cette autorisation utilise le petit sémaphore de ressource. Lorsque ce paramètre a la valeur 0, indique qu'un sémaphore ordinaire est utilisé.

ideal_memory_kb

bigint

Taille, en kilo-octets (Ko), de l'allocation de mémoire pour tout contenir dans la mémoire physique. Cette valeur est basée sur l'estimation de cardinalité.

Autorisations

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Notes

Voici un exemple de scénario de débogage typique pour le délai d'attente de requête :

  • Vérification de l'état global de la mémoire système à l'aide de sys.dm_os_memory_clerks, sys.dm_os_sys_info et de divers autres compteurs de performances.

  • Vérification des réservations de mémoire d'exécution de requête dans sys.dm_os_memory_clerks où type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Vérification des requêtes en attente d'allocation à l'aide de sys.dm_exec_query_memory_grants.

  • Examen approfondi des requêtes utilisant beaucoup de mémoire à l'aide de sys.dm_exec_requests.

  • Si vous soupçonnez une perte de contrôle de requête, examinez le Showplan à partir de sys.dm_exec_query_plan et le texte du traitement à partir de sys.dm_exec_sql_text.

Les requêtes qui utilisent des vues de gestion dynamique comportant la clause ORDER BY ou des fonctions d'agrégation peuvent accroître la consommation de mémoire et par conséquent contribuer au problème qu'elles tentent de résoudre.

La fonctionnalité Gouverneur de ressources permet à un administrateur de base de données de répartir des ressources serveur entre plusieurs pools de ressources (20 pools au maximum). Dans SQL Server 2008, chaque pool se comporte comme une petite instance de serveur indépendante et requiert 2 sémaphores. Le nombre des lignes retournées de sys.dm_exec_query_resource_semaphores peut être jusqu'à 20 fois supérieur au nombre de lignes retournées dans SQL Server 2005.