변경 데이터 캡처 - sys.dm_cdc_log_scan_sessions
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
현재 데이터베이스의 각 로그 검색 세션에 대해 하나의 행을 반환합니다. 반환된 마지막 행은 현재 세션을 나타냅니다. 이 뷰를 사용하면 현재 로그 검색 세션에 대한 상태 정보, 또는 SQL Server 인스턴스가 마지막으로 시작된 이후의 모든 세션에 대한 집계 정보를 반환할 수 있습니다.
SQL Server 인스턴스가 다시 시작되거나 장애 조치(failover)가 발생할 때마다 레코드 sys.dm_cdc_log_scan_sessions
가 다시 설정됩니다. 또한 쿼리된 데이터베이스가 Always On 가용성 그룹의 보조 역할에 있는 경우 레코드가 반환되지 않습니다.
자세한 내용은 CDC(변경 데이터 캡처)란?
열 이름 | 데이터 형식 | 설명 |
---|---|---|
session_id |
int | 세션의 ID입니다. 0일 경우 이 행에서 반환된 데이터는 SQL Server 인스턴스가 마지막으로 시작된 이후의 모든 세션에 대한 집계입니다. |
start_time | 날짜/시간 | 세션이 시작된 시간입니다.session_id 가 0일 경우 집계된 데이터 컬렉션이 시작된 시간입니다. |
end_time | 날짜/시간 | 세션이 종료된 시간입니다. NULL = 세션이 활성 상태입니다. session_id 가 0일 경우 마지막 세션이 종료된 시간입니다. |
duration | int | 세션의 기간(초)입니다. 0인 경우 세션에 변경 데이터 캡처 트랜잭션이 포함되어 있지 않습니다. session_id 가 0일 경우 변경 데이터 캡처 트랜잭션이 있는 모든 세션의 총 기간(초)입니다. |
scan_phase | nvarchar(200) | 세션의 현재 단계입니다. 다음은 가능한 값과 해당 설명입니다. 1: 구성 읽기 2: 첫 번째 검색, 해시 테이블 작성 3: 두 번째 검색 4: 두 번째 검색 5: 두 번째 검색 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 | 날짜/시간 | 마지막 커밋 로그 레코드가 처리된 시간입니다.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 | 날짜/시간 | 변경 데이터 캡처 트랜잭션이 포함된 마지막 커밋 로그 레코드가 처리된 시간입니다.session_id 가 0일 경우 변경 데이터 캡처 트랜잭션을 포함하는 세션에 대한 마지막 커밋 로그 레코드 시간입니다. |
latency | int | 세션에서 end_time 및 last_commit_cdc_time 사이의 차이(초)입니다. 이 카운터는 7단계의 끝에 채워집니다.session_id 가 0일 경우 세션에서 기록된 0이 아닌 마지막 대기 값입니다. |
empty_scan_count | int | 변경 데이터 캡처 트랜잭션이 포함되지 않은 연속 세션 수입니다. |
failed_sessions_count | int | 실패한 세션 수입니다. |
설명
DMV에는 sys.dm_cdc_log_scan_sessions
최대 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