다음을 통해 공유


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, S0S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, 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)