sys.dm_tran_active_snapshot_database_transactions(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
SQL Server 인스턴스에서 이 동적 관리 뷰는 행 버전을 생성하거나 잠재적으로 액세스하는 모든 활성 트랜잭션에 대한 가상 테이블을 반환합니다. 트랜잭션은 다음 중 하나 이상의 조건에서 포함됩니다.
ALLOW_SNAPSHOT_ISOLATION 및 READ_COMMITTED_SNAPSHOT 데이터베이스 옵션 중 하나 또는 둘 다 ON으로 설정된 경우:
스냅샷 격리 수준에서 실행되는 각 트랜잭션에 대해 하나의 행 또는 행 버전 관리를 사용하는 읽기 커밋된 격리 수준이 있습니다.
현재 데이터베이스에서 행 버전을 만드는 각 트랜잭션에 대해 하나의 행이 있습니다. 예를 들어 트랜잭션은 현재 데이터베이스의 행을 업데이트하거나 삭제하여 행 버전을 생성합니다.
트리거가 실행되면 트리거가 실행되는 트랜잭션에 대해 하나의 행이 있습니다.
온라인 인덱싱 프로시저가 실행되고 있으면 인덱스를 만드는 트랜잭션에 대해 하나의 행이 있습니다.
MARS(Multiple Active Results Sets) 세션을 설정하면 행 버전에 액세스하는 각 트랜잭션에 대해 하나의 행이 있습니다.
이 동적 관리 뷰에는 시스템 트랜잭션이 포함되지 않습니다.
참고 항목
Azure Synapse Analytics 또는 PDW(Analytics Platform System)에서 이를 호출하려면 이름 sys.dm_pdw_nodes_tran_active_snapshot_database_transactions 사용합니다. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.
구문
sys.dm_tran_active_snapshot_database_transactions
반환된 테이블
열 이름 | 데이터 형식 | 설명 |
---|---|---|
transaction_id | bigint | 트랜잭션에 할당된 고유 ID입니다. 트랜잭션 ID는 주로 잠금 작업에서 트랜잭션을 식별하는 데 사용됩니다. |
transaction_sequence_num | bigint | 트랜잭션 시퀀스 번호입니다. 트랜잭션이 시작될 때 트랜잭션에 할당되는 고유한 시퀀스 번호입니다. 버전 레코드를 생성하지 않고 스냅샷 검사를 사용하지 않는 트랜잭션은 트랜잭션 시퀀스 번호를 받지 않습니다. |
commit_sequence_num | bigint | 트랜잭션이 완료되는 시기를 나타내는 시퀀스 번호입니다(커밋 또는 중지). 활성 트랜잭션의 경우 값은 NULL입니다. |
is_snapshot | int | 0 = 스냅샷 격리 트랜잭션이 아닙니다. 1 = 스냅샷 격리 트랜잭션입니다. |
session_id | int | 트랜잭션을 시작한 세션의 ID입니다. |
first_snapshot_sequence_num | bigint | 스냅샷을 만들 때 활성 상태였던 트랜잭션의 가장 낮은 트랜잭션 시퀀스 번호입니다. 실행 시 스냅샷 트랜잭션은 해당 시간에 모든 활성 트랜잭션의 스냅샷을 만듭니다. 스냅샷 트랜잭션이 아닌 경우 이 열에 0이 표시됩니다. |
max_version_chain_traversed | int | 트랜잭션 일치 버전을 찾기 위해 트래버스되는 버전 체인의 최대 길이입니다. |
average_version_chain_traversed | real | 트래버스되는 버전 체인의 평균 행 버전 수입니다. |
elapsed_time_seconds | 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 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE
권한 또는 ##MS_ServerStateReader##
서버 역할의 멤버 자격이 필요합니다.
SQL Server 2022 이상에 대한 사용 권한
서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.
설명
sys.dm_tran_active_snapshot_database_transactions XSN(트랜잭션 시퀀스 번호)이 할당된 트랜잭션을 보고합니다. 트랜잭션이 버전 저장소에 처음 액세스할 때 XSN이 할당됩니다. 스냅샷 격리를 사용하도록 설정하거나 행 버전 관리를 사용하여 커밋된 격리를 읽는 데이터베이스에서 예제는 XSN이 트랜잭션에 할당된 경우를 보여 줍니다.
트랜잭션이 직렬화 가능 격리 수준에서 실행되는 경우 트랜잭션에서 행 버전이 생성되게 하는 UPDATE 작업 등의 문을 처음으로 실행할 때 XSN이 할당됩니다.
트랜잭션이 스냅샷 격리에서 실행되는 경우 SELECT 작업을 포함한 DML(데이터 조작 언어) 문이 실행될 때 XSN이 할당됩니다.
트랜잭션 시퀀스 번호는 데이터베이스 엔진 인스턴스에서 시작되는 각 트랜잭션에 대해 순차적으로 증가합니다.
예제
다음 예에서는 ALLOW_SNAPSHOT_ISOLATION 및 READ_COMMITTED_SNAPSHOT 옵션이 ON으로 설정된 데이터베이스에서 각각 XSN(트랜잭션 시퀀스 번호)으로 식별되는 4개의 동시 트랜잭션이 실행되는 테스트 시나리오를 사용합니다. 다음 트랜잭션이 실행 중입니다.
XSN-57은 직렬화 가능한 격리에서 업데이트 작업입니다.
XSN-58은 XSN-57과 동일합니다.
XSN-59는 스냅샷 격리에서의 선택 작업입니다.
XSN-60은 XSN-59와 같습니다.
다음 쿼리가 실행됩니다.
SELECT
transaction_id,
transaction_sequence_num,
commit_sequence_num,
is_snapshot session_id,
first_snapshot_sequence_num,
max_version_chain_traversed,
average_version_chain_traversed,
elapsed_time_seconds
FROM sys.dm_tran_active_snapshot_database_transactions;
결과 집합은 다음과 같습니다.
transaction_id transaction_sequence_num commit_sequence_num
-------------- ------------------------ -------------------
9295 57 NULL
9324 58 NULL
9387 59 NULL
9400 60 NULL
is_snapshot session_id first_snapshot_sequence_num
----------- ----------- ---------------------------
0 54 0
0 53 0
1 52 57
1 51 57
max_version_chain_traversed average_version_chain_traversed
--------------------------- -------------------------------
0 0
0 0
1 1
1 1
elapsed_time_seconds
--------------------
419
397
359
333
다음 정보는 sys.dm_tran_active_snapshot_database_transactions 결과를 평가합니다.
XSN-57: 이 트랜잭션이 스냅샷 격리
is_snapshot
에서 실행되고 있지 않으므로 값은first_snapshot_sequence_num
다음과 같습니다0
.transaction_sequence_num
는 하나 또는 둘 다 ALLOW_SNAPSHOT_ISOLATION 또는 READ_COMMITTED_SNAPSHOT 데이터베이스 옵션이 ON이기 때문에 트랜잭션 시퀀스 번호가 이 트랜잭션에 할당되었음을 보여줍니다.XSN-58: 이 트랜잭션은 스냅샷 격리에서 실행되고 있지 않으며 XSN-57에 대한 동일한 정보가 적용됩니다.
XSN-59: 스냅샷 격리에서 실행되는 첫 번째 활성 트랜잭션입니다. 이 트랜잭션은
first_snapshot_sequence_num
에 표시된 대로 XSN-57 이전에 커밋된 데이터를 읽습니다. 또한 이 트랜잭션의 출력은 행에 대해 이동한 최대 버전 체인이1
이며 액세스한 각 행에 대해 평균1
버전을 이동했음을 보여 줍니다. 이는 XSN-57, XSN-58 및 XSN-60 트랜잭션이 행을 수정하지 않고 커밋했음을 의미합니다.XSN-60: 스냅샷 격리에서 실행되는 두 번째 트랜잭션입니다. 출력은 XSN-59와 동일한 정보를 표시합니다.
참고 항목
SET TRANSACTION ISOLATION LEVEL(Transact-SQL)
동적 관리 뷰 및 함수(Transact-SQL)
트랜잭션 관련 동적 관리 뷰 및 함수(Transact-SQL)