次の方法で共有


sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure 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;