変更データ キャプチャ - sys.dm_cdc_log_scan_sessions
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
現在のデータベース内のログ スキャン セッションごとに 1 行のデータを返します。 返された最後の行は、現在のセッションを表します。 このビューを使用すると、現在のログ スキャン セッションのステータス情報を取得できます。SQL Server のインスタンスが開始されてからのすべてのセッションの集計情報を取得することもできます。
sys.dm_cdc_log_scan_sessions
内のレコードは、SQL Server のインスタンスが再起動されたとき、またはフェールオーバーが発生するたびにリセットされます。 さらに、クエリ対象のデータベースが Always On 可用性グループのセカンダリ ロールにある場合、レコードは返されません。
詳細については、「 変更データ キャプチャ (CDC) とは」を参照してください。
列名 | データ型 | 説明 |
---|---|---|
session_id |
int | セッションの ID。 0 = この行で返されるデータは、SQL Server のインスタンスが最後に開始してからのすべてのセッションの集計です。 |
start_time | datetime | セッションの開始時刻です。session_id = 0 の場合、集計対象データの収集が開始された時刻を表します。 |
end_time | datetime | セッションが終了した時刻です。 NULL は、セッションがアクティブであることを表します。 session_id = 0 の場合、最後のセッションが終了した時刻を表します。 |
duration | int | セッションの実行時間 (秒単位) です。 0 の場合、セッションには、変更データ キャプチャ トランザクションが含まれていません。 session_id = 0 の場合、変更データ キャプチャ トランザクションを持つすべてのセッションの実行時間の合計 (秒単位) を表します。 |
scan_phase | nvarchar(200) | セッションの現在のフェーズです。 次に、使用される値とその説明を示します。 1: 構成の読み取り 2: 1 回目のスキャン、ハッシュ テーブルの構築 3: 2 回目のスキャン 4: 2 回目のスキャン 5: 2 回目のスキャン 6: スキーマのバージョン管理 7: 最後のスキャン 8: 完了 session_id = 0 の場合、この値は常に "Aggregate" になります。 |
error_count | int | 発生したエラーの数。session_id = 0 の場合、すべてのセッション内のエラーの合計数を表します。 |
start_lsn | nvarchar(23) | セッションの開始 LSN です。session_id = 0 の場合、最後のセッションの開始 LSN を表します。 |
current_lsn | nvarchar(23) | スキャン中の現在の LSN。session_id = 0 の場合、現在の LSN は 0 です。 |
end_lsn | nvarchar(23) | セッションの最終 LSN です。 NULL は、セッションがアクティブであることを表します。 session_id = 0 の場合、最後のセッションの終了 LSN を表します。 |
tran_count | bigint | 処理された変更データ キャプチャ トランザクションの数。 このカウンターは、フェーズ 2 で設定されます。session_id = 0 の場合、すべてのセッション内の処理されたトランザクションの数を表します。 |
last_commit_lsn | nvarchar(23) | 処理された最後のコミット ログ レコードの LSN です。session_id = 0 の場合、任意のセッションの最後のコミット ログ レコード LSN を表します。 |
last_commit_time | datetime | 最後のコミット ログ レコードが処理された時刻です。session_id = 0 の場合、任意のセッションの最後のコミット ログ レコードの時刻を表します。 |
log_record_count | bigint | スキャンされたログ レコードの数。session_id = 0 の場合、すべてのセッションでスキャンされたレコードの数を表します。 |
schema_change_count | int | 検出されたデータ定義言語 (DDL) 操作の数。 このカウンターは、フェーズ 6 で設定されます。session_id = 0 の場合、すべてのセッション内の処理された DDL 操作の数を表します。 |
command_count | bigint | 処理されたコマンドの数。session_id = 0 の場合、すべてのセッション内の処理されたコマンドの数を表します。 |
first_begin_cdc_lsn | nvarchar(23) | 変更データ キャプチャ トランザクションを含んでいた最初の LSN です。session_id = 0 の場合、変更データ キャプチャ トランザクションを含んでいた最初の LSN です。 |
last_commit_cdc_lsn | nvarchar(23) | 変更データ キャプチャ トランザクションを含んでいた最終コミット ログ レコードの LSN です。session_id = 0 の場合、変更データ キャプチャ トランザクションを含んでいた任意のセッションの最終コミット ログ レコード LSN を表します。 |
last_commit_cdc_time | datetime | 変更データ キャプチャ トランザクションを含んでいた最終コミット ログ レコードが処理された時刻です。session_id = 0 の場合、変更データ キャプチャ トランザクションを含んでいた任意のセッションの最終コミット ログ レコードの時刻を表します。 |
latency | int | セッション内の、end_time と last_commit_cdc_time の間の、秒単位の差です。 このカウンターは、フェーズ 7 の最後に設定されます。session_id = 0 の場合、あるセッションによって記録された、最後のゼロ以外の待機時間の値を表します。 |
empty_scan_count | int | 変更データ キャプチャ トランザクションが含まれない、連続するセッションの数。 |
failed_sessions_count | int | 失敗したセッションの数。 |
解説
sys.dm_cdc_log_scan_sessions
DMV には、最大 32 個のスキャン セッションと、session_id= 0
を含むすべてのスキャン セッションの集計が含まれています。 そのため、この動的管理ビューには、いつでも最大 33 行を含めることができます。
アクセス許可
sys.dm_cdc_log_scan_sessions
動的管理ビューに対してクエリを実行するには、VIEW DATABASE STATE 権限が必要です。 動的管理ビューの権限について詳しくは、動的管理ビューと関数 (Transact-SQL) に関する記事を参照してください。
SQL Server 2022 以降でのアクセス許可
データベースに対する VIEW DATABASE PERFORMANCE STATE アクセス許可が必要です。
例
次の例では、最新のセッションの情報が取得されます。
USE AdventureWorks2022;
GO
SELECT session_id, start_time, end_time, duration, scan_phase,
error_count, start_lsn, current_lsn, end_lsn, tran_count,
last_commit_lsn, last_commit_time, log_record_count, schema_change_count,
command_count, first_begin_cdc_lsn, last_commit_cdc_lsn,
last_commit_cdc_time, latency, empty_scan_count, failed_sessions_count
FROM sys.dm_cdc_log_scan_sessions
WHERE session_id = (SELECT MAX(b.session_id) FROM sys.dm_cdc_log_scan_sessions AS b);
GO