sys.dm_exec_query_memory_grants (Transact-SQL)

 

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse

Retourne des informations sur toutes les requêtes qui ont demandé et qui sont en attente d’une allocation de mémoire ou ont eu une allocation de mémoire. Les requêtes qui ne nécessitent pas une allocation de mémoire n’apparaissent pas dans cette vue. Par exemple, trier et les opérations de jointure de hachage ont des allocations de mémoire pendant l’exécution de la requête lors de requêtes sans un ORDER BY clause n’aura pas une mémoire accorder.

Dans Base de données Azure SQL, les vues de gestion dynamique ne peuvent pas exposer des informations qui ont un impact sur la relation contenant-contenu de la base de données, ou exposer des informations concernant d'autres bases de données auxquelles l'utilisateur a accès. Pour éviter d'exposer ces informations, chaque ligne contenant des données qui n'appartient pas au locataire connecté est filtrée. En outre, les valeurs dans les colonnes scheduler_id, wait_order, pool_id, group_id sont filtrées ; la colonne a la valeur null.

System_CAPS_ICON_note.jpg Remarque


Appeler à partir de Azure SQL Data Warehouse ou Parallel Data Warehouse, utilisez le nom sys.dm_pdw_nodes_exec_query_memory_grants.

Nom de colonneType de donnéesDescription
ID de sessionsmallintID (SPID) de la session dans laquelle cette requête est en cours d'exécution.
request_idintID de la demande. Unique dans le contexte de la session.
scheduler_idintID du planificateur qui planifie cette requête.
degré de parallélismesmallintDegré de parallélisme de cette requête.
request_timedate/heureDate et heure auxquelles cette requête a demandé l'allocation de mémoire.
grant_timedate/heureDate et heure auxquelles la mémoire a été allouée pour cette requête. NULL si la mémoire n'a pas encore été allouée.
requested_memory_kbbigintQuantité totale de mémoire demandée, en kilo-octets.
granted_memory_kbbigintQuantité totale de mémoire actuellement allouée, en kilo-octets. Peut être NULL si la mémoire n'a pas encore été allouée. Dans une situation type, cette valeur doit être le même que requested_memory_kb. Pour la création d'index, le serveur peut autoriser de la mémoire à la demande supplémentaire au-delà de la mémoire allouée initialement.
required_memory_kbbigintMémoire minimale requise pour exécuter cette requête, en kilo-octets. requested_memory_kb est identique ou supérieure à cette quantité.
used_memory_kbbigintMémoire physique utilisée à ce moment, en kilo-octets.
max_used_memory_kbbigintMémoire physique maximale utilisée jusqu'à ce moment, en kilo-octets.
query_costfloatCoût estimé de la requête.
timeout_secintDélai d'expiration, en secondes, avant que cette requête abandonne la demande d'allocation de la mémoire.
resource_semaphore_id n'smallintID non unique du sémaphore de ressource sur lequel attend cette requête.

 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_idsmallintID de la file d'attente dans laquelle cette requête attend l'allocation de mémoire. NULL si la mémoire est déjà allouée.
wait_orderintOrdre séquentiel des requêtes en attente dans le texte spécifié queue_id. Cette valeur peut changer pour une requête donnée si d'autres requêtes bénéficient d'une allocation mémoire ou d'un délai d'attente. NULL si la mémoire est déjà allouée.
is_next_candidatebitsCandidat pour l'allocation mémoire suivante.

1 = Oui

0 = Non

NULL = La mémoire est déjà allouée.
wait_time_msbigintTemps d'attente en millisecondes. NULL si la mémoire est déjà allouée.
plan_handlevarbinary(64)Identificateur de ce plan de requête. Utilisez sys.dm_exec_query_plan pour extraire le plan XML réel.
sql_handlevarbinary(64)Identificateur de texte Transact-SQL pour cette requête. Utilisez sys.dm_exec_sql_text pour obtenir la valeur réelle Transact-SQL texte.
group_idintID du groupe de charge de travail dans lequel cette requête est exécutée.
pool_idintID du pool de ressources auquel appartient ce groupe de charge de travail.
is_smalltinyintSi la valeur est définie sur 1, cette allocation utilise le sémaphore de ressource le plus petit. Si la valeur est définie sur 0, c'est que le sémaphore de ressource ordinaire est utilisé.
ideal_memory_kbbigintTaille de l'allocation mémoire, en kilo-octets (Ko) pour l'ajuster à la mémoire physique. Elle est basée sur l'estimation de la cardinalité.
« pdw_node_id »intS’applique à: Azure SQL Data Warehouse, Parallel Data Warehouse

L’identificateur pour le nœud de cette distribution.

requièrent l'autorisation VIEW SERVER STATE sur le serveur.

Un scénario de débogage type pour le délai d'attente de la requête peut ressembler à ce qui suit :

  • Vérifiez l’état de mémoire de système global à l’aide sys.dm_os_memory_clerks, sys.dm_os_sys_info, et différents compteurs de performance.

  • Recherchez les réservations de mémoire de requête en cours d’exécution dans sys.dm_os_memory_clerkstype = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Recherchez les requêtes en attente d’allocations à l’aide de sys.dm_exec_query_memory_grants.

    --Find all queries waiting in the memory queue  
    SELECT * FROM sys.dm_exec_query_memory_grants where grant_time is null  
    
    
  • Cache pour les requêtes de recherche avec des allocations de mémoire à l’aide desys.dm_exec_cached_plans &#40 ; Transact-SQL &#41 ; et sys.dm_exec_query_plan &#40 ; Transact-SQL &#41 ;

    -- retrieve every query plan from the plan cache  
    USE master;  
    GO  
    SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);  
    GO  
    
    
    
  • Examinez les requêtes sollicitant beaucoup de mémoire à l’aide de sys.dm_exec_requests.

    --Find top 5 queries by average CPU time  
    SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],  
    Plan_handle, query_plan   
    FROM sys.dm_exec_query_stats AS qs  
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)  
    ORDER BY total_worker_time/execution_count DESC;  
    GO  
    
    
    
  • Si une requête rebelle, examinez le plan d’exécution à partir de sys.dm_exec_query_plan et le texte à partir du lot sys.dm_exec_sql_text.

Les requêtes qui utilisent des vues de gestion dynamiques qui incluent 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 (64 pools au maximum). À partir de SQL Server 2008, chaque pool se comporte comme une instance de petit serveur indépendante et requiert 2 sémaphores. Le nombre de lignes qui sont retournées à partir de sys.dm_exec_query_resource_semaphores peut être jusqu'à 20 fois plus de lignes qui sont retournées dans SQL Server 2005.

Sys.dm_exec_query_resource_semaphores &#40 ; Transact-SQL &#41 ;
Vues de gestion dynamique et fonctions &#40 ; liées à l’exécution Transact-SQL &#41 ;

Ajouts de la communauté

Afficher: