sys.dm_exec_query_memory_grants (Transact-SQL)sys.dm_exec_query_memory_grants (Transact-SQL)

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retourne des informations sur toutes les requêtes qui ont demandé et sont en attente d’une allocation de mémoire ou qui ont reçu une allocation de mémoire.Returns information about all queries that have requested and are waiting for a memory grant or have been given a memory grant. Les requêtes qui ne nécessitent pas une allocation de mémoire n’apparaîtra pas dans cette vue.Queries that do not require a memory grant will not appear in this view. Par exemple, trier et les opérations de jointure de hachage ont des allocations de mémoire pour l’exécution de requête, lors de requêtes sans un ORDER BY clause ne disposera d’une mémoire accorder.For example, sort and hash join operations have memory grants for query execution, while queries without an ORDER BY clause will not have a memory grant.

Dans Azure SQL DatabaseAzure SQL Database, 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.In Azure SQL DatabaseAzure SQL Database, dynamic management views cannot expose information that would impact database containment or expose information about other databases the user has access to. 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 valeur de colonne est définie avec la valeur NULL.To avoid exposing this information, every row that contains data that doesn’t belong to the connected tenant is filtered out. In addition, the values in the columns scheduler_id, wait_order, pool_id, group_id are filtered; the column value is set to NULL.

Note

Pour appeler cette de Azure SQL Data WarehouseAzure SQL Data Warehouse ou Parallel Data WarehouseParallel Data Warehouse, utilisez le nom sys.dm_pdw_nodes_exec_query_memory_grants.To call this from Azure SQL Data WarehouseAzure SQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_exec_query_memory_grants.

Nom de colonneColumn name Type de donnéesData type DescriptionDescription
session_idsession_id smallintsmallint ID (SPID) de la session dans laquelle cette requête est en cours d'exécution.ID (SPID) of the session where this query is running.
request_idrequest_id intint ID de la demande.ID of the request. Unique dans le contexte de la session.Unique in the context of the session.
scheduler_idscheduler_id intint ID du planificateur qui planifie cette requête.ID of the scheduler that is scheduling this query.
degré de parallélismedop smallintsmallint Degré de parallélisme de cette requête.Degree of parallelism of this query.
request_timerequest_time datetimedatetime Date et heure auxquelles cette requête a demandé l'allocation de mémoire.Date and time when this query requested the memory grant.
grant_timegrant_time datetimedatetime Date et heure auxquelles la mémoire a été allouée pour cette requête.Date and time when memory was granted for this query. NULL si la mémoire n'a pas encore été allouée.NULL if memory is not granted yet.
requested_memory_kbrequested_memory_kb bigintbigint Quantité totale de mémoire demandée, en kilo-octets.Total requested amount of memory in kilobytes.
granted_memory_kbgranted_memory_kb bigintbigint Quantité totale de mémoire actuellement allouée, en kilo-octets.Total amount of memory actually granted in kilobytes. Peut être NULL si la mémoire n'a pas encore été allouée.Can be NULL if the memory is not granted yet. Dans une situation type, cette valeur doit être le même que requested_memory_kb.For a typical situation, this value should be the same as 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.For index creation, the server may allow additional on-demand memory beyond initially granted memory.
required_memory_kbrequired_memory_kb bigintbigint Mémoire minimale requise pour exécuter cette requête, en kilo-octets.Minimum memory required to run this query in kilobytes. requested_memory_kb est identique ou supérieure à cette quantité.requested_memory_kb is the same or larger than this amount.
used_memory_kbused_memory_kb bigintbigint Mémoire physique utilisée à ce moment, en kilo-octets.Physical memory used at this moment in kilobytes.
max_used_memory_kbmax_used_memory_kb bigintbigint Mémoire physique maximale utilisée jusqu'à ce moment, en kilo-octets.Maximum physical memory used up to this moment in kilobytes.
query_costquery_cost floatfloat Coût estimé de la requête.Estimated query cost.
timeout_sectimeout_sec intint Délai d'expiration, en secondes, avant que cette requête abandonne la demande d'allocation de la mémoire.Time-out in seconds before this query gives up the memory grant request.
resource_semaphore_id n'resource_semaphore_id smallintsmallint ID non unique du sémaphore de ressource sur lequel attend cette requête.Non-unique ID of the resource semaphore on which this query is waiting.

Remarque : cet ID est unique dans les versions de SQL ServerSQL Server antérieures à SQL Server 2008SQL Server 2008.Note: This ID is unique in versions of SQL ServerSQL Server that are earlier than SQL Server 2008SQL Server 2008. Cette modification peut affecter l'exécution de la requête de résolution des problèmes.This change can affect troubleshooting query execution. Pour plus d’informations, consultez la section « Remarques » plus loin dans cette rubrique.For more information, see the "Remarks" section later in this topic.
queue_idqueue_id smallintsmallint ID de la file d'attente dans laquelle cette requête attend l'allocation de mémoire.ID of waiting queue where this query waits for memory grants. NULL si la mémoire est déjà allouée.NULL if the memory is already granted.
wait_orderwait_order intint Ordre séquentiel des requêtes en attente dans le texte spécifié queue_id.Sequential order of waiting queries within the specified 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.This value can change for a given query if other queries get memory grants or time out. NULL if memory is already granted.
is_next_candidateis_next_candidate bitbit Candidat pour l'allocation mémoire suivante.Candidate for next memory grant.

1 = Oui1 = Yes

0 = Non0 = No

NULL = La mémoire est déjà allouée.NULL = Memory is already granted.
wait_time_mswait_time_ms bigintbigint Temps d'attente en millisecondes.Wait time in milliseconds. NULL si la mémoire est déjà allouée.NULL if the memory is already granted.
plan_handleplan_handle varbinary(64)varbinary(64) Identificateur de ce plan de requête.Identifier for this query plan. Utilisez sys.dm_exec_query_plan pour extraire le plan XML réel.Use sys.dm_exec_query_plan to extract the actual XML plan.
sql_handlesql_handle varbinary(64)varbinary(64) Identificateur de texte Transact-SQLTransact-SQL pour cette requête.Identifier for Transact-SQLTransact-SQL text for this query. Utilisez sys.dm_exec_sql_text pour obtenir le texte réel Transact-SQLTransact-SQL texte.Use sys.dm_exec_sql_text to get the actual Transact-SQLTransact-SQL text.
group_idgroup_id intint ID du groupe de charge de travail dans lequel cette requête est exécutée.ID for the workload group where this query is running.
pool_idpool_id intint ID du pool de ressources auquel appartient ce groupe de charge de travail.ID of the resource pool that this workload group belongs to.
is_smallis_small tinyinttinyint Si la valeur est définie sur 1, cette allocation utilise le sémaphore de ressource le plus petit.When set to 1, indicates that this grant uses the small resource semaphore. Si la valeur est définie sur 0, c'est que le sémaphore de ressource ordinaire est utilisé.When set to 0, indicates that a regular semaphore is used.
ideal_memory_kbideal_memory_kb bigintbigint Taille de l'allocation mémoire, en kilo-octets (Ko) pour l'ajuster à la mémoire physique.Size, in kilobytes (KB), of the memory grant to fit everything into physical memory. Elle est basée sur l'estimation de la cardinalité.This is based on the cardinality estimate.
pdw_node_idpdw_node_id intint S’applique aux: Azure SQL Data WarehouseAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data WarehouseApplies to: Azure SQL Data WarehouseAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data Warehouse

L’identificateur du nœud qui se trouve sur cette distribution.The identifier for the node that this distribution is on.

PermissionsPermissions

Sur SQL ServerSQL Server, nécessite VIEW SERVER STATE autorisation.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
Sur Base de données SQLSQL Database niveaux Premium, nécessite le VIEW DATABASE STATE autorisation dans la base de données.On Base de données SQLSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. Sur Base de données SQLSQL Database Standard et les niveaux de base, nécessite le administrateur du serveur ou administrateur Active Directory de Azure compte.On Base de données SQLSQL Database Standard and Basic Tiers, requires the Server admin or an Azure Active Directory admin account.

NotesRemarks

Un scénario de débogage type pour le délai d'attente de la requête peut ressembler à ce qui suit :A typical debugging scenario for query time-out may look like the following:

  • Vérifiez l’état de mémoire de système global à l’aide sys.dm_os_memory_clerks, sys.dm_os_sys_infoet les compteurs de performance différents.Check overall system memory status using sys.dm_os_memory_clerks, sys.dm_os_sys_info, and various performance counters.

  • Recherchez les réservations de mémoire de requête en cours d’exécution dans sys.dm_os_memory_clerkstype = 'MEMORYCLERK_SQLQERESERVATIONS'.Check for query-execution memory reservations in sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Recherchez les requêtes en attente d’allocations à l’aide de sys.dm_exec_query_memory_grants.Check for queries waiting for grants using 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  
    
  • Recherche de cache pour les requêtes avec des allocations de mémoire à l’aidesys.dm_exec_cached_plans ( Transact-SQL ) et sys.dm_exec_query_plan ( Transact-SQL )Search cache for queries with memory grants usingsys.dm_exec_cached_plans (Transact-SQL) and sys.dm_exec_query_plan (Transact-SQL)

    -- 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 utilisant beaucoup de mémoire à l’aide de sys.dm_exec_requests.Further examine memory-intensive queries using 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 perte de contrôle de la requête, examinez le plan d’exécution à partir de sys.dm_exec_query_plan et le texte à partir du lot sys.dm_exec_sql_text.If a runaway query is suspected, examine the Showplan from sys.dm_exec_query_plan and batch text from 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.Queries that use dynamic management views that include ORDER BY or aggregates may increase memory consumption and thus contribute to the problem they are troubleshooting.

    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).The Resource Governor feature enables a database administrator to distribute server resources among resource pools, up to a maximum of 64 pools. À partir de SQL Server 2008SQL Server 2008, chaque pool se comporte comme une instance de petit serveur indépendante et requiert 2 sémaphores.Beginning with SQL Server 2008SQL Server 2008, each pool behaves like a small independent server instance and requires 2 semaphores. 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 2005SQL Server 2005.The number of rows that are returned from sys.dm_exec_query_resource_semaphores can be up to 20 times more than the rows that are returned in SQL Server 2005SQL Server 2005.

Voir aussiSee Also

Sys.dm_exec_query_resource_semaphores ( Transact-SQL ) sys.dm_exec_query_resource_semaphores (Transact-SQL)
Les fonctions et vues de gestion dynamique ( liées à l’exécution Transact-SQL )Execution Related Dynamic Management Views and Functions (Transact-SQL)