sys.dm_tran_current_transaction(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric의 SQL 데이터베이스

현재 세션에서 트랜잭션의 상태 정보를 표시하는 단일 행을 반환합니다.

비고

Azure Synapse Analytics에서 부르려면 sys.dm_pdw_nodes_tran_current_transaction라는 이름을 사용하세요. 이 구문은 Azure Synapse Analytics의 서버리스 SQL 풀에서 지원되지 않습니다.

Syntax

  
sys.dm_tran_current_transaction  

반환된 테이블

열 이름 데이터 형식 설명
transaction_id bigint 현재 스냅샷의 트랜잭션 ID입니다.
transaction_sequence_num bigint 레코드 버전을 생성하는 트랜잭션의 시퀀스 번호입니다.
transaction_is_snapshot bit 스냅샷 격리 상태입니다. 스냅샷 격리에서 트랜잭션이 시작된 경우 이 값은 1입니다. 그렇지 않으면 값이 0입니다.
first_snapshot_sequence_num bigint 스냅샷을 만들 때 활성 상태였던 트랜잭션의 가장 낮은 트랜잭션 시퀀스 번호입니다. 실행 시 스냅샷 트랜잭션은 해당 시간에 모든 활성 트랜잭션의 스냅샷을 만듭니다. 스냅샷 트랜잭션이 아닌 경우 이 열에 0이 표시됩니다.
last_transaction_sequence_num bigint 전역 시퀀스 번호입니다. 이 값은 시스템에서 생성한 마지막 트랜잭션 시퀀스 번호를 나타냅니다.
first_useful_sequence_num bigint 전역 시퀀스 번호입니다. 이 값은 버전 저장소에 보관해야 하는 행 버전이 있는 트랜잭션의 가장 오래된 트랜잭션 시퀀스 번호를 나타냅니다. 이전 트랜잭션에서 만든 행 버전을 제거할 수 있습니다.
pdw_node_id int 에 적용: Azure Synapse Analytics

이 배포가 있는 노드의 식별자입니다.

Permissions

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 이상에 대한 권한

서버에 대한 SERVER PERFORMANCE STATE 권한이 필요합니다 VIEW .

Examples

다음 예에서는 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  
   ,transaction_is_snapshot  
   ,first_snapshot_sequence_num  
   ,last_transaction_sequence_num  
   ,first_useful_sequence_num  
  FROM sys.dm_tran_current_transaction;  

XSN-59의 결과는 다음과 같습니다.

transaction_id       transaction_sequence_num transaction_is_snapshot  
-------------------- ------------------------ -----------------------  
9387                 59                       1                         
  
first_snapshot_sequence_num last_transaction_sequence_num  
--------------------------- -----------------------------  
57                               61                        
  
first_useful_sequence_num  
-------------------------  
57  

출력은 XSN-59가 XSN-59가 시작될 때 활성화된 첫 번째 트랜잭션으로 XSN-57을 사용하는 스냅샷 트랜잭션임을 보여 줍니다. 즉, XSN-59는 XSN-57보다 낮은 트랜잭션 시퀀스 번호가 있는 트랜잭션에서 커밋된 데이터를 읽습니다.

XSN-57의 결과는 다음과 같습니다.

transaction_id       transaction_sequence_num transaction_is_snapshot  
-------------------- ------------------------ -----------------------  
9295                 57                       0  
  
first_snapshot_sequence_num last_transaction_sequence_num  
--------------------------- -----------------------------  
NULL                        61  
  
first_useful_sequence_num  
-------------------------  
57  

XSN-57은 스냅샷 트랜잭션이 아니므로 < a0/ first_snapshot_sequence_num >입니다 NULL.