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.
Remarque
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.