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

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

要求したメモリ許可を待機しているし、メモリ許可が与えられているすべてのクエリに関する情報を返します。Returns information about all queries that have requested and are waiting for a memory grant or have been given a memory grant. メモリ許可を必要としないクエリは、このビューでは表示されません。Queries that do not require a memory grant will not appear in this view. たとえば、並べ替えし、ハッシュ結合の操作なしのクエリ中に、クエリ実行メモリ許可がある、 ORDER BY句には、メモリ許可がありません。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.

Azure SQL データベースAzure SQL Databaseでは、動的管理ビューでデータベースの包含に影響を与える情報を公開することや、ユーザーがアクセスできる他のデータベースに関する情報を公開することはできません。In Azure SQL データベースAzure SQL Database, dynamic management views cannot expose information that would impact database containment or expose information about other databases the user has access to. この情報を公開することを避けるため、接続されているテナントに属していないデータが含まれるすべての行はフィルターで除外します。さらに、列の値scheduler_idwait_orderpool_idgroup_idフィルター処理され、列の値の設定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.

注意

これからAzure SQL データ ウェアハウスAzure SQL Data WarehouseまたはParallel Data WarehouseParallel Data Warehouse、名前を使用して、 sys.dm_pdw_nodes_exec_query_memory_grantsします。To call this from Azure SQL データ ウェアハウスAzure SQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_exec_query_memory_grants.

列名Column name データ型Data type 説明Description
session_idsession_id smallintsmallint ID (SPID) のこのクエリが実行されているセッションです。ID (SPID) of the session where this query is running.
request_idrequest_id intint 要求の ID。ID of the request. セッションのコンテキスト内で一意です。Unique in the context of the session.
scheduler_idscheduler_id intint このクエリのスケジュールを設定しているスケジューラの ID。ID of the scheduler that is scheduling this query.
dopdop smallintsmallint このクエリの並列処理の次数。Degree of parallelism of this query.
request_timerequest_time datetimedatetime このクエリがメモリ許可を要求した日付と時刻。Date and time when this query requested the memory grant.
grant_timegrant_time datetimedatetime 日付と、このクエリのメモリが許可された時間。Date and time when memory was granted for this query. メモリがまだ許可されていない場合は NULL です。NULL if memory is not granted yet.
requested_memory_kbrequested_memory_kb bigintbigint 合計要求されたメモリ量 (キロバイト単位)。Total requested amount of memory in kilobytes.
granted_memory_kbgranted_memory_kb bigintbigint 実際には、キロバイト単位で許可されているメモリの総量。Total amount of memory actually granted in kilobytes. メモリがまだ許可されていない場合、NULL を指定できます。Can be NULL if the memory is not granted yet. 一般的な状況では、この値は同じrequested_memory_kbします。For a typical situation, this value should be the same as requested_memory_kb. インデックス作成では、最初に許可されたメモリ量を超えて、追加のオンデマンド メモリが許可される場合があります。For index creation, the server may allow additional on-demand memory beyond initially granted memory.
required_memory_kbrequired_memory_kb bigintbigint 最小メモリ (キロバイト単位)、このクエリを実行するために必要です。Minimum memory required to run this query in kilobytes. requested_memory_kbは、この量よりも小さい場合。requested_memory_kb is the same or larger than this amount.
used_memory_kbused_memory_kb bigintbigint この時点で使用されている物理メモリ (KB 単位)。Physical memory used at this moment in kilobytes.
max_used_memory_kbmax_used_memory_kb bigintbigint この時点までに使用された最大物理メモリ (KB 単位)。Maximum physical memory used up to this moment in kilobytes.
query_costquery_cost floatfloat 推定クエリ コスト。Estimated query cost.
timeout_sectimeout_sec intint このクエリがメモリ許可要求をやめるまでのタイムアウト (秒単位)。Time-out in seconds before this query gives up the memory grant request.
resource_semaphore_idresource_semaphore_id smallintsmallint このクエリが待機しているリソース セマフォの非一意の ID。Non-unique ID of the resource semaphore on which this query is waiting.

注: この ID は一意のバージョンのSQL ServerSQL Serverより前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. この変更は、クエリの実行のトラブルシューティングに影響する可能性があります。This change can affect troubleshooting query execution. 詳細については、このトピックの後半の「解説」セクションを参照してください。For more information, see the "Remarks" section later in this topic.
queue_idqueue_id smallintsmallint このクエリがメモリ許可を待機している待機キューの ID。ID of waiting queue where this query waits for memory grants. メモリが既に与えられている場合は NULL です。NULL if the memory is already granted.
wait_orderwait_order intint 指定した待機クエリの順番queue_idします。Sequential order of waiting queries within the specified queue_id. この値は、他のクエリ メモリ許可またはタイムアウトを取得する場合、特定のクエリを変更できます。メモリが既に与えられている場合は NULL です。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 [次へ] のメモリ許可の候補。Candidate for next memory grant.

1 = はい1 = Yes

0 = いいえ0 = No

NULL = メモリが既に与えられています。NULL = Memory is already granted.
wait_time_mswait_time_ms bigintbigint 待機時間 (ミリ秒単位)。Wait time in milliseconds. メモリが既に与えられている場合は NULL です。NULL if the memory is already granted.
plan_handleplan_handle varbinary(64)varbinary(64) このクエリ プランの識別子。Identifier for this query plan. 使用sys.dm_exec_query_planを実際の XML プランを抽出します。Use sys.dm_exec_query_plan to extract the actual XML plan.
sql_handlesql_handle varbinary(64)varbinary(64) このクエリの Transact-SQLTransact-SQL テキストの識別子。Identifier for Transact-SQLTransact-SQL text for this query. 使用sys.dm_exec_sql_text 、実際に取得するTransact-SQLTransact-SQLテキスト。Use sys.dm_exec_sql_text to get the actual Transact-SQLTransact-SQL text.
group_idgroup_id intint このクエリが実行されているワークロード グループの ID。ID for the workload group where this query is running.
pool_idpool_id intint このワークロード グループが属するリソース プールの ID。ID of the resource pool that this workload group belongs to.
is_smallis_small tinyinttinyint 1 に設定すると、この許可で小さなリソース セマフォが使用されます。When set to 1, indicates that this grant uses the small resource semaphore. 0 に設定すると、通常のセマフォが使用されることを示します。When set to 0, indicates that a regular semaphore is used.
ideal_memory_kbideal_memory_kb bigintbigint すべてのものを物理メモリに収まるようにメモリ許可のキロバイト (KB) 単位のサイズ。Size, in kilobytes (KB), of the memory grant to fit everything into physical memory. これは、カーディナリティの推定に基づきます。This is based on the cardinality estimate.
pdw_node_idpdw_node_id intint 適用対象: Azure SQL データ ウェアハウスAzure SQL Data WarehouseParallel Data WarehouseParallel Data WarehouseApplies to: Azure SQL データ ウェアハウスAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data Warehouse

この配布であるノードの識別子。The identifier for the node that this distribution is on.

アクセス許可Permissions

SQL ServerSQL Server、必要がありますVIEW SERVER STATE権限。On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
Azure SQL データベースAzure SQL Database 上では、データベース内の VIEW DATABASE STATE アクセス許可が必要です。On Azure SQL データベースAzure SQL Database, requires the VIEW DATABASE STATE permission in the database.

コメントRemarks

クエリ タイムアウトの一般的なデバッグ シナリオは、次のようになります可能性があります。A typical debugging scenario for query time-out may look like the following:

  • 全体的なシステム メモリを使用して状態を確認sys.dm_os_memory_clerkssys.dm_os_sys_info、およびさまざまなパフォーマンス カウンター。Check overall system memory status using sys.dm_os_memory_clerks, sys.dm_os_sys_info, and various performance counters.

  • クエリ実行メモリ予約確認sys.dm_os_memory_clerks場所type = 'MEMORYCLERK_SQLQERESERVATIONS'します。Check for query-execution memory reservations in sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • 確認を待機しているクエリ1を使用して許可sys.dm_exec_query_memory_grantsします。Check for queries waiting1 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  
    

    1 このシナリオの場合、待機の種類は一般的に RESOURCE_SEMAPHORE になります。1 In this scenario, the wait type is typically RESOURCE_SEMAPHORE. 詳細については、「sys.dm_os_wait_stats (Transact-SQL)」を参照してください。For more information, see sys.dm_os_wait_stats (Transact-SQL).

  • 使用して、メモリ許可を使用したクエリのキャッシュを検索sys.dm_exec_cached_plans (TRANSACT-SQL) sys.dm_exec_query_plan (TRANSACT-SQL)Search cache for queries with memory grants using sys.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  
    
  • 使用してメモリを消費するクエリをさらに調べたり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  
    
  • ランナウェイ クエリが疑いがある場合、確認のプラン表示からsys.dm_exec_query_planバッチからのテキストと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.

含む動的管理ビューを使用するクエリORDER BYまたは集計がメモリ使用量が増えるし、問題のある問題をそれによって可能性があります。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.

リソース ガバナーの機能では、データベース管理者は、最大 64 個までのリソース プールでのサーバー リソースに分散できます。The Resource Governor feature enables a database administrator to distribute server resources among resource pools, up to a maximum of 64 pools. 以降でSQL Server 2008SQL Server 2008、各プールが小規模の独立したサーバー インスタンスのように動作し、2 つのセマフォを必要とします。Beginning with SQL Server 2008SQL Server 2008, each pool behaves like a small independent server instance and requires 2 semaphores. 返される行の数sys.dm_exec_query_resource_semaphoresできる最大 20 倍に返される行よりSQL Server 2005 (9.x)SQL Server 2005 (9.x)します。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 2005 (9.x)SQL Server 2005 (9.x).

関連項目See Also

sys.dm_exec_query_resource_semaphores (TRANSACT-SQL) sys.dm_exec_query_resource_semaphores (Transact-SQL)
sys.dm_os_wait_stats (Transact-SQL) sys.dm_os_wait_stats (Transact-SQL)
実行関連の動的管理ビューおよび関数 (Transact-SQL)Execution Related Dynamic Management Views and Functions (Transact-SQL)