次の方法で共有


sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

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

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

タイプ 説明
pool_id int リソース ガバナーのリソース プール 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 2005 のメモリ使用量を監視する方法LARge クエリ コンパイルは SQL Server 2014 のRESOURCE_SEMAPHORE_QUERY_COMPILEで待機します