sys.dm_os_latch_stats (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
クラス別に編成されたすべてのラッチ待機に関する情報を返します。
Note
これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、 sys.dm_pdw_nodes_os_latch_statsという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
列名 | データ型 | 説明 |
---|---|---|
latch_class | nvarchar(60) | ラッチ クラスの名前。 |
waiting_requests_count | bigint | このクラスのラッチの待機数。 このカウンターは、ラッチ待機の開始時に増分されます。 |
wait_time_ms | bigint | クラス内のラッチに対する合計待機時間 (ミリ秒単位)。 注: この列は、ラッチ待機中とラッチ待機の終了時に 5 分ごとに更新されます。 |
max_wait_time_ms | bigint | メモリ オブジェクトがラッチを待機した最大時間。 この値が著しく大きい場合、内部デッドロックを示している可能性があります。 |
pdw_node_id | int | 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW) このディストリビューションがオンになっているノードの識別子。 |
アクセス許可
SQL Server と SQL Managed Instance では、VIEW SERVER STATE
アクセス許可が必要です。
SQL Database の Basic、S0、S1 サービス対象、および Elastic Pool のデータベースの場合、サーバー管理者アカウント、Microsoft Entra 管理者アカウント、または ##MS_ServerStateReader##
サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE
アクセス許可または ##MS_ServerStateReader##
サーバー ロールのメンバーシップのいずれかが必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
解説
sys.dm_os_latch_stats を使用すると、別のラッチ クラスの待機数や待機時間を相対的に確認することにより、ラッチの競合の発生源を特定できます。 状況によっては、ラッチの競合を解決または軽減できる場合があります。 ただし、Microsoft カスタマー サポート サービスに問い合わせる必要がある場合があります。
次のように DBCC SQLPERF
を使用すると、sys.dm_os_latch_stats の内容をリセットできます。
DBCC SQLPERF ('sys.dm_os_latch_stats', CLEAR);
GO
これにより、すべてのカウンターが 0 にリセットされます。
Note
SQL Server が再起動された場合、これらの統計は保持されません。 統計が最後にリセットされてから、または SQL Server が開始されてから、すべてのデータが累積されます。
ラッチ
ラッチは、さまざまな SQL Server コンポーネントで使用されるロックに似た内部の軽量同期オブジェクトです。 ラッチは、主にバッファーやファイル アクセスなどの操作中にデータベース ページを同期するために使用されます。 各ラッチは、1 つのアロケーション ユニットに関連付けられています。
ラッチが別のスレッドによって、競合するモードで保持されており、ラッチ要求がすぐに許可されない場合は、ラッチ待機が発生します。 ロックとは異なり、書き込み操作でも、操作の直後にラッチが解放されます。
ラッチは、コンポーネントと使用法に基づいてクラスにグループ化されます。 特定のクラスの 0 個以上のラッチは、SQL Server のインスタンス内の任意の時点に存在できます。
Note
sys.dm_os_latch_stats
は、すぐに許可されたラッチ要求、または待機せずに失敗したラッチ要求を追跡しません。
次の表に、さまざまなラッチ クラスの簡単な説明を示します。
Latch クラス | 説明 |
---|---|
ALLOC_CREATE_RINGBUF | SQL Server によって内部的に使用され、割り当てリング バッファーの作成の同期を初期化します。 |
ALLOC_CREATE_FREESPACE_CACHE | ヒープの内部空き領域キャッシュの同期を初期化するために使用されます。 |
ALLOC_CACHE_MANAGER | 内部コヒーレンシー テストを同期するために使用されます。 |
ALLOC_FREESPACE_CACHE | ページのキャッシュへのアクセスを、ヒープおよびバイナリ ラージ オブジェクト (BLOB) の使用可能な領域と同期するために使用されます。 このクラスのラッチの競合は、複数の接続が同時に行をヒープまたは BLOB に挿入しようとしたときに発生する可能性があります。 このような競合を少なくするには、オブジェクトをパーティション分割します。 各パーティションには、独自のラッチがあります。 パーティション分割により、挿入が複数のラッチに分散されます。 |
ALLOC_EXTENT_CACHE | 割り当てされていないページを含むエクステントのキャッシュへのアクセスを同期するために使用されます。 このクラスのラッチの競合は、複数の接続が同じ割り当てユニット内のデータ ページを同時に割り当てようとしたときに発生する可能性があります。 この競合は、この割り当てユニットが一部であるオブジェクトをパーティション分割することで軽減できます。 |
ACCESS_METHODS_DATASET_PARENT | 並列操作中に子データセットへのアクセスを親データセットに同期するために使用されます。 |
ACCESS_METHODS_HOBT_FACTORY | 内部ハッシュ テーブルへのアクセスを同期するために使用されます。 |
ACCESS_METHODS_HOBT | HoBt のメモリ内表現へのアクセスを同期するために使用されます。 |
ACCESS_METHODS_HOBT_COUNT | HoBt ページと行カウンターへのアクセスを同期するために使用されます。 |
ACCESS_METHODS_HOBT_VIRTUAL_ROOT | 内部 B ツリーのルート ページ抽象化へのアクセスを同期するために使用されます。 |
ACCESS_METHODS_CACHE_ONLY_HOBT_ALLOC | 作業テーブルへのアクセスを同期するために使用します。 |
ACCESS_METHODS_BULK_ALLOC | 一括アロケーター内のアクセスを同期するために使用されます。 |
ACCESS_METHODS_SCAN_RANGE_GENERATOR | 並列スキャン中、範囲ジェネレーターへのアクセスを同期するために使用します。 |
ACCESS_METHODS_KEY_RANGE_GENERATOR | キー範囲の並列スキャン中、先行読み取り操作へのアクセスを同期するために使用します。 |
APPEND_ONLY_STORAGE_INSERT_POINT | 高速追加専用ストレージ ユニットで挿入を同期するために使用されます。 |
APPEND_ONLY_STORAGE_FIRST_ALLOC | 追加専用ストレージ ユニットの最初の割り当てを同期するために使用します。 |
APPEND_ONLY_STORAGE_UNIT_MANAGER | 高速追加専用ストレージ・ユニット・マネージャー内の内部データ構造アクセス同期に使用されます。 |
APPEND_ONLY_STORAGE_MANAGER | 高速追加専用ストレージ ユニット マネージャーで圧縮操作を同期するために使用されます。 |
BACKUP_RESULT_SET | 並列バックアップの結果セットを同期するために使用されます。 |
BACKUP_TAPE_POOL | バックアップ テープ プールを同期するために使用されます。 |
BACKUP_LOG_REDO | バックアップ ログの再実行操作を同期するために使用されます。 |
BACKUP_INSTANCE_ID | バックアップ パフォーマンス モニター カウンターのインスタンス ID の生成を同期するために使用されます。 |
BACKUP_MANAGER | 内部バックアップ マネージャーを同期するために使用します。 |
BACKUP_MANAGER_DIFFERENTIAL | 差分バックアップ操作を DBCC と同期するために使用されます。 |
BACKUP_OPERATION | データベース、ログ、ファイル バックアップなど、バックアップ操作内の内部データ構造の同期に使用されます。 |
BACKUP_FILE_HANDLE | 復元操作中にファイルを開く操作を同期するために使用します。 |
バッファー | データベース ページへの短期的なアクセスを同期するために使用されます。 データベース ページの読み取りまたは変更を行う前に、バッファー ラッチが必要です。 バッファー ラッチの競合は、ホット ページや低速 I/O など、いくつかの問題を示している可能性があります。 このラッチ クラスは、ページ ラッチを使用するすべての状況に対応しています。 sys.dm_os_wait_statsは、I/O 操作によって発生するページ ラッチ待機と、ページの読み取り操作と書き込み操作の間で違いを生み出します。 |
BUFFER_POOL_GROW | バッファー プールの拡張操作中、内部バッファー マネージャーの同期に使用します。 |
DATABASE_CHECKPOINT | データベース内のチェックポイントをシリアル化するために使用されます。 |
CLR_PROCEDURE_HASHTABLE | 内部のみで使用します。 |
CLR_UDX_STORE | 内部のみで使用します。 |
CLR_DATAT_ACCESS | 内部のみで使用します。 |
CLR_XVAR_PROXY_LIST | 内部のみで使用します。 |
DBCC_CHECK_AGGREGATE | 内部のみで使用します。 |
DBCC_CHECK_RESULTSET | 内部のみで使用します。 |
DBCC_CHECK_TABLE | 内部のみで使用します。 |
DBCC_CHECK_TABLE_INIT | 内部のみで使用します。 |
DBCC_CHECK_TRACE_LIST | 内部のみで使用します。 |
DBCC_FILE_CHECK_OBJECT | 内部のみで使用します。 |
DBCC_PERF | 内部パフォーマンス モニター カウンターを同期するために使用されます。 |
DBCC_PFS_STATUS | 内部のみで使用します。 |
DBCC_OBJECT_METADATA | 内部のみで使用します。 |
DBCC_HASH_DLL | 内部のみで使用します。 |
EVENTING_CACHE | 内部のみで使用します。 |
FCB | ファイル制御ブロックへのアクセスを同期するために使用します。 |
FCB_REPLICA | 内部のみで使用します。 |
FGCB_ALLOC | ファイル グループ内のラウンド ロビン割り当て情報へのアクセスを同期するために使用します。 |
FGCB_ADD_REMOVE | ファイル グループへのアクセスを同期して、ファイルの追加、ドロップ、拡大、圧縮を行う操作に使用します。 |
FILEGROUP_MANAGER | 内部のみで使用します。 |
FILE_MANAGER | 内部のみで使用します。 |
FILESTREAM_FCB | 内部のみで使用します。 |
FILESTREAM_FILE_MANAGER | 内部のみで使用します。 |
FILESTREAM_GHOST_FILES | 内部のみで使用します。 |
FILESTREAM_DFS_ROOT | 内部のみで使用します。 |
LOG_MANAGER | 内部のみで使用します。 |
FULLTEXT_DOCUMENT_ID | 内部のみで使用します。 |
FULLTEXT_DOCUMENT_ID_TRANSACTION | 内部のみで使用します。 |
FULLTEXT_DOCUMENT_ID_NOTIFY | 内部のみで使用します。 |
FULLTEXT_LOGS | 内部のみで使用します。 |
FULLTEXT_CRAWL_LOG | 内部のみで使用します。 |
FULLTEXT_ADMIN | 内部のみで使用します。 |
FULLTEXT_AMDIN_COMMAND_CACHE | 内部のみで使用します。 |
FULLTEXT_LANGUAGE_TABLE | 内部のみで使用します。 |
FULLTEXT_CRAWL_DM_LIST | 内部のみで使用します。 |
FULLTEXT_CRAWL_CATALOG | 内部のみで使用します。 |
FULLTEXT_FILE_MANAGER | 内部のみで使用します。 |
DATABASE_MIRRORING_REDO | 内部のみで使用します。 |
DATABASE_MIRRORING_SERVER | 内部のみで使用します。 |
DATABASE_MIRRORING_CONNECTION | 内部のみで使用します。 |
DATABASE_MIRRORING_STREAM | 内部のみで使用します。 |
QUERY_OPTIMIZER_VD_MANAGER | 内部のみで使用します。 |
QUERY_OPTIMIZER_ID_MANAGER | 内部のみで使用します。 |
QUERY_OPTIMIZER_VIEW_REP | 内部のみで使用します。 |
RECOVERY_BAD_PAGE_TABLE | 内部のみで使用します。 |
RECOVERY_MANAGER | 内部のみで使用します。 |
SECURITY_OPERATION_RULE_TABLE | 内部のみで使用します。 |
SECURITY_OBJPERM_CACHE | 内部のみで使用します。 |
SECURITY_CRYPTO | 内部のみで使用します。 |
SECURITY_KEY_RING | 内部のみで使用します。 |
SECURITY_KEY_LIST | 内部のみで使用します。 |
SERVICE_BROKER_CONNECTION_RECEIVE | 内部のみで使用します。 |
SERVICE_BROKER_TRANSMISSION | 内部のみで使用します。 |
SERVICE_BROKER_TRANSMISSION_UPDATE | 内部のみで使用します。 |
SERVICE_BROKER_TRANSMISSION_STATE | 内部のみで使用します。 |
SERVICE_BROKER_TRANSMISSION_ERRORS | 内部のみで使用します。 |
SSBXmitWork | 内部のみで使用します。 |
SERVICE_BROKER_MESSAGE_TRANSMISSION | 内部のみで使用します。 |
SERVICE_BROKER_MAP_MANAGER | 内部のみで使用します。 |
SERVICE_BROKER_HOST_NAME | 内部のみで使用します。 |
SERVICE_BROKER_READ_CACHE | 内部のみで使用します。 |
SERVICE_BROKER_WAITFOR_MANAGER | 待機キューのインスタンス レベル マップを同期するために使用されます。 データベース ID、データベース バージョン、キュー ID タプルごとに 1 つのキューが存在します。 このクラスのラッチの競合は、多くの接続がある場合に発生する可能性があります: WAITFOR(RECEIVE) 待機状態。WAITFOR(RECEIVE) の呼び出し;WAITFOR タイムアウトを超えています。メッセージを受信する。WAITFOR(RECEIVE)を含むトランザクションをコミットまたはロールバックする。WAITFOR(RECEIVE) 待機状態のスレッド数を減らすことで、競合を減らすことができます。 |
SERVICE_BROKER_WAITFOR_TRANSACTION_DATA | 内部のみで使用します。 |
SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA | 内部のみで使用します。 |
SERVICE_BROKER_TRANSPORT | 内部のみで使用します。 |
SERVICE_BROKER_MIRROR_ROUTE | 内部のみで使用します。 |
TRACE_ID | 内部のみで使用します。 |
TRACE_AUDIT_ID | 内部のみで使用します。 |
TRACE | 内部のみで使用します。 |
TRACE_CONTROLLER | 内部のみで使用します。 |
TRACE_EVENT_QUEUE | 内部のみで使用します。 |
TRANSACTION_DISTRIBUTED_MARK | 内部のみで使用します。 |
TRANSACTION_OUTCOME | 内部のみで使用します。 |
NESTING_TRANSACTION_READONLY | 内部のみで使用します。 |
NESTING_TRANSACTION_FULL | 内部のみで使用します。 |
MSQL_TRANSACTION_MANAGER | 内部のみで使用します。 |
DATABASE_AUTONAME_MANAGER | 内部のみで使用します。 |
UTILITY_DYNAMIC_VECTOR | 内部のみで使用します。 |
UTILITY_SPARSE_BITMAP | 内部のみで使用します。 |
UTILITY_DATABASE_DROP | 内部のみで使用します。 |
UTILITY_DYNAMIC_MANAGER_VIEW | 内部のみで使用します。 |
UTILITY_DEBUG_FILESTREAM | 内部のみで使用します。 |
UTILITY_LOCK_INFORMATION | 内部のみで使用します。 |
VERSIONING_TRANSACTION | 内部のみで使用します。 |
VERSIONING_TRANSACTION_LIST | 内部のみで使用します。 |
VERSIONING_TRANSACTION_CHAIN | 内部のみで使用します。 |
VERSIONING_STATE | 内部のみで使用します。 |
VERSIONING_STATE_CHANGE | 内部のみで使用します。 |
KTM_VIRTUAL_CLOCK | 内部のみで使用します。 |
Note
ドキュメントでは、一般的にインデックスに関して B ツリーという用語が使用されます。 行ストア インデックスで、データベース エンジンによって B+ ツリーが実装されます。 これは、列ストア インデックスやメモリ最適化テーブルのインデックスには適用されません。 詳細については、「SQL Server と Azure SQL のインデックスのアーキテクチャとデザイン ガイド」を参照してください。
参照
DBCC SQLPERF (Transact-SQL)
SQL Server オペレーティングシステム関連の動的管理ビュー (Transact-sql)
SQL Server の Latches オブジェクト