Share via


sys.dm_tran_current_transaction (Transact-SQL)

Retorna uma única linha que exibe informações do estado da transação na sessão atual.

Sintaxe

sys.dm_tran_current_transaction

Tabela retornada

Nome da coluna

Tipo de dados

Descrição

transaction_id

bigint

ID de transação do instantâneo atual.

transaction_sequence_num

bigint

Número de seqüência da transação que gera a versão de registro.

transaction_is_snapshot

bit

Estado de isolamento de instantâneo. Este valor será 1 se a transação for iniciada no isolamento de instantâneo. Caso contrário, o valor será 0.

first_snapshot_sequence_num

bigint

Número de seqüência de transação mais baixo das transações que estavam ativas quando o instantâneo foi feito. Em execução, uma transação de instantâneo faz um instantâneo de todas as transações ativas naquele momento. No caso de transações não-instantâneo, esta coluna mostra 0.

last_transaction_sequence_num

bigint

Número de seqüência global. Este valor representa o último número de seqüência de transação que foi gerado pelo sistema.

first_useful_sequence_num

bigint

Número de seqüência global. Este valor representa o número de seqüência de transação mais antigo da transação que tem versões de linha que devem ser retidas no armazenamento de versões. As versões de linha que foram criadas por transações anteriores podem ser removidas.

Permissões

Requer a permissão VIEW SERVER STAT no servidor.

Exemplos

O exemplo a seguir usa um cenário de teste no qual quatro transações simultâneas, cada uma identificada por um XSN (número de seqüência de transação), estão sendo executadas em um banco de dados no qual as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT estão definidas como ON. As seguintes transações estão sendo executadas:

  • XSN-57 é uma operação de atualização sob isolamento serializável.

  • XSN-58 é o mesmo que XSN-57.

  • XSN-59 é uma operação de seleção sob isolamento de instantâneo.

  • XSN-60 é o mesmo que XSN-59.

A consulta a seguir é executada no escopo de cada transação.

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;

Aqui está o resultado de 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

A saída mostra que XSN-59 é uma transação de instantâneo que usa XSN-57 como a primeira transação que estava ativa quando XSN-59 foi iniciado. Isso significa que XSN-59 lê dados confirmados por transações com um número de seqüência de transação inferior a XSN-57.

Aqui está o resultado de 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

Como XSN-57 não é uma transação de instantâneo, first_snapshot_sequence_num é NULL.