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。
|
||
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_clerks、sys.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 または集計を含む動的管理ビューを使用するクエリではメモリの使用量が増える場合があり、それによってトラブルシューティングが必要な問題が発生する可能性があります。
データベース管理者は、リソース ガバナー機能を使用することで、サーバー リソースを最大 64 個までのリソース プールに分散できます。 SQL Server 2008 以降では、各プールが小規模の独立したサーバー インスタンスのように動作し、2 つのセマフォを必要とします。sys.dm_exec_query_resource_semaphores から返される行数は、最大で SQL Server 2005 で返される行数の 20 倍になることがあります。