sys.dm_exec_query_memory_grants (Transact-SQL)

メモリ許可を取得したクエリまたは実行のためのメモリ許可をまだ要求しているクエリに関する情報を返します。メモリ許可を待機する必要のないクエリは、このビューには表示されません。

列名

データ型

説明

session_id

smallint

このクエリを実行中のセッションの ID (SPID)。

request_id

int

要求の ID。セッションのコンテキスト内で一意です。

scheduler_id

int

このクエリのスケジュールを設定しているスケジューラの ID。

dop

smallint

このクエリの並行処理の程度。

request_time

datetime

このクエリがメモリ許可を要求した日付と時刻。

grant_time

datetime

このクエリにメモリが許可された日付と時刻。メモリがまだ許可されていない場合は NULL です。

requested_memory_kb

bigint

メモリの要求量の合計 (KB 単位)。

granted_memory_kb

bigint

実際に許可されたメモリの総量 (KB 単位)。メモリがまだ許可されていない場合、NULL になることがあります。一般的な状況では、この値は requested_memory_kb と同じになります。インデックス作成では、最初に許可されたメモリ量を超えて、追加のオンデマンド メモリが許可される場合があります。

required_memory_kb

bigint

このクエリを実行するために必要な最小メモリ (KB 単位)。requested_memory_kb は、この値以上になります。

used_memory_kb

bigint

この時点で使用されている物理メモリ (KB 単位)。

max_used_memory_kb

bigint

この時点までに使用された最大物理メモリ (KB 単位)。

query_cost

float

推定クエリ コスト。

timeout_sec

int

このクエリがメモリ許可要求をやめるまでのタイムアウト (秒単位)。

resource_semaphore_id

smallint

このクエリが待機しているリソース セマフォの非一意の ID。

注意
SQL Server 2008 より前のバージョンの SQL Server では、この ID が一意です。この変更は、クエリの実行のトラブルシューティングに影響する可能性があります。詳細については、後の「解説」を参照してください。

queue_id

smallint

このクエリがメモリ許可を待機している待機キューの ID。メモリが既に許可されている場合は NULL です。

wait_order

int

指定した queue_id 内の待機キューの順番。他のクエリがメモリ許可を取得するか、タイムアウトになった場合、個々のクエリのこの値は変化する可能性があります。メモリが既に許可されている場合は NULL です。

is_next_candidate

bit

次のメモリ許可の候補。

1 = はい

0 = いいえ

NULL = メモリが既に許可されている

wait_time_ms

bigint

待機時間 (ミリ秒単位)。メモリが既に許可されている場合は NULL です。

plan_handle

varbinary(64)

このクエリ プランの識別子。実際の XML プランを抽出するには、sys.dm_exec_query_plan を使用します。

sql_handle

varbinary(64)

このクエリの Transact-SQL テキストの識別子。実際の Transact-SQL テキストを取得するには、sys.dm_exec_sql_text を使用します。

group_id

int

このクエリが実行されているワークロード グループの ID。

pool_id

int

このワークロード グループが属するリソース プールの ID。

is_small

tinyint

1 に設定すると、この許可で小さなリソース セマフォが使用されます。0 に設定すると、通常のセマフォが使用されます。

ideal_memory_kb

bigint

物理メモリ内にすべてを収めるために必要なメモリ許可のサイズ (KB 単位)。これは基数の推定値に基づいています。

権限

サーバーの VIEW SERVER STATE 権限が必要です。

説明

クエリ タイムアウトの一般的なデバッグ方法は、次のようになります。

  • sys.dm_os_memory_clerkssys.dm_os_sys_info、およびさまざまなパフォーマンス カウンタを使用して、全体的なシステム メモリ状態を調べます。

  • sys.dm_os_memory_clerks で、type = 'MEMORYCLERK_SQLQERESERVATIONS' であるクエリ実行メモリ予約を調べます。

  • sys.dm_exec_query_memory_grants を使用して、許可を待機しているクエリを調べます。

  • sys.dm_exec_requests を使用して、メモリを集中的に使用するクエリをさらに調べます。

  • ランナウェイ クエリの疑いがある場合は、sys.dm_exec_query_plan のプラン表示と、sys.dm_exec_sql_text のバッチ テキストを調べます。

ORDER BY または集計を含む動的管理ビューを使用するクエリではメモリの使用量が増える場合があり、それによってトラブルシューティングが必要な問題が発生する可能性があります。

データベース管理者は、リソース ガバナ機能を使用することで、サーバー リソースを最大 20 個までのリソース プールに分散できます。SQL Server 2008 では、各プールが小規模の独立したサーバー インスタンスのように動作し、2 つのセマフォを必要とします。sys.dm_exec_query_resource_semaphores から返される行数は、最大で SQL Server 2005 で返される行数の 20 倍になることがあります。