sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed Instance

同時実行クエリの最適化を調整するために使用されるリソース セマフォの現在の状態を返します。

Column 種類 説明
pool_id int Resource Governorのリソース プール ID
name sysname コンパイル ゲート名 (Small Gateway、Medium Gateway、Big Gateway)
max_count int 同時コンパイルの最大構成数
active_count int このゲート内のコンパイルの現在アクティブな数
waiter_count int このゲート内のウェイターの数
threshold_factor bigint クエリの最適化で使用される最大メモリ部分を定義するしきい値係数。 小規模なゲートウェイの場合、threshold_factorは、小さなゲートウェイでアクセスを取得する必要がある前に、1 つのクエリの最大オプティマイザー メモリ使用量をバイト単位で示します。 中規模ゲートウェイとビッグ ゲートウェイの場合、threshold_factorは、このゲートで使用可能なサーバー メモリの合計の部分を示します。 これは、ゲートのメモリ使用量のしきい値を計算するときに除数として使用されます。
threshold bigint 次のしきい値メモリ (バイト単位)。 メモリ消費量がこのしきい値に達した場合、このゲートウェイへのアクセス権を取得するには、クエリが必要です。 このゲートウェイへのアクセス権を取得するためにクエリが必要ない場合は"-1"。
is_active bit 現在のゲートを渡すためにクエリが必要かどうか。

アクセス許可

SQL Serverサーバーに対する VIEW SERVER STATE 権限が必要です。

Azure SQL Database には、データベースの VIEW DATABASE STATE 権限が必要です。

SQL Server 2022 以降のアクセス許可

サーバーに対する VIEW SERVER PERFORMANCE STATE 権限が必要です。

注釈

SQL Serverは、階層化されたゲートウェイ アプローチを使用して、許可される同時実行コンパイルの数を調整します。 小、中、大を含む 3 つのゲートウェイが使用されます。 ゲートウェイは、より大きなコンパイル メモリを必要とするコンシューマーによって、メモリ リソース全体の枯渇を防ぐのに役立ちます。

ゲートウェイで待機すると、コンパイルが遅延します。 コンパイルの遅延に加えて、調整された要求には、待機の種類の累積RESOURCE_SEMAPHORE_QUERY_COMPILE関連付けられます。 RESOURCE_SEMAPHORE_QUERY_COMPILE待機の種類は、クエリがコンパイルに大量のメモリを使用していて、そのメモリが使い果たされているか、または全体的に十分なメモリが使用可能であることを示している場合がありますが、特定のゲートウェイで使用可能なユニットが使い果たされています。 sys.dm_exec_query_optimizer_memory_gatewaysの出力は、クエリ実行プランをコンパイルするためのメモリが不足しているシナリオのトラブルシューティングに使用できます。

A. リソース セマフォの統計の表示

SQL Serverのこのインスタンスの現在のオプティマイザー メモリ ゲートウェイの統計情報は何ですか?

SELECT [pool_id], [name], [max_count], [active_count],
       [waiter_count], [threshold_factor], [threshold],
       [is_active]
FROM sys.dm_exec_query_optimizer_memory_gateways;   

参照

動的管理ビューと動的管理関数 (Transact-SQL)
実行関連の動的管理ビューと関数 (Transact-SQL)
DBCC MEMORYSTATUS コマンドを使用して、SQL Server 2005SQL Server 2014 のRESOURCE_SEMAPHORE_QUERY_COMPILEで大規模なクエリ コンパイル待機のメモリ使用量を監視する方法