Partilhar via


sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Em uma instância de SQL Server, esta exibição de gerenciamento dinâmico retorna uma tabela virtual para todas as transações ativas que geram ou potencialmente acessam versões de linhas. As transações são incluídas em uma ou mais das seguintes condições:

  • Quando uma ou ambas as opções de banco de dados ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT estão definidas como ON:

    • Há uma linha para cada transação cuja execução aconteça em nível de isolamento do instantâneo ou em nível de isolamento confirmado por leitura utilizando controle de versão de linhas.

    • Há uma linha para cada transação que cause a criação de uma versão de linha no banco de dados atual. Por exemplo, a transação gera uma versão de linha pela atualização ou exclusão de uma linha no banco de dados atual.

  • Quando um gatilho é ativado, há uma linha para a transação sob a qual o gatilho está executando.

  • Quando um procedimento de indexação online está em execução, há uma linha para a transação que está criando o índice.

  • Quando uma sessão MARS (Multiple Active Results Sets) está habilitada, há uma linha para cada transação que está acessando versões de linha.

Esta exibição de gerenciamento dinâmico não inclui transações de sistema.

Sintaxe

sys.dm_tran_active_snapshot_database_transactions

Tabela retornada

Nome da coluna

Tipo de dados

Descrição

transaction_id

bigint

Número de identificação exclusivo atribuído à transação. O ID transação é usado principalmente para identificar a transação em operações de bloqueio.

transaction_sequence_num

bigint

Número de seqüência da transação. Trata-se de um número de seqüência exclusivo atribuído a uma transação quando ela se inicia. Transações que não geram registros de versão e não usam verificações de instantâneo não receberão um número de seqüência de transação. Para obter mais informações, consulte Compreendendo níveis de isolamento com base em controle de versão de linha.

commit_sequence_num

bigint

Número de seqüência que indica quando a transação termina (confirmações ou paradas). Para transações ativas, o valor é NULL.

is_snapshot

int

0 = Não é uma transação de isolamento de instantâneo.

1 = É uma transação de isolamento de instantâneo.

session_id

int

ID da sessão que iniciou a transação.

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.

max_version_chain_traversed

int

Comprimento máximo da cadeia de versão que é atravessada para localizar a versão consistente transacional.

average_version_chain_traversed

real

Número médio de versões de linha nas cadeias de versão que são atravessadas.

elapsed_time_seconds

bigint

Tempo decorrido desde que a transação obteve seu número de seqüência de transação.

Permissões

Requer a permissão VIEW SERVER STATE no servidor.

Comentários

sys.dm_tran_active_snapshot_database_transactions informa transações às quais um número de seqüência de transação (XSN) é atribuído. O XSN é atribuído quando a transação acessa o armazenamento de versões pela primeira vez. Em um banco de dados habilitado para isolamento de instantâneo ou isolamento confirmado por leitura utilizando controle de versão de linhas, os exemplos mostram quando um XSN é atribuído a uma transação:

  • Se uma transação estiver executando em nível de isolamento de serializável, um XSN será atribuído quando a transação executar, pela primeira vez, uma instrução, como uma operação UPDATE, que cause a criação de uma versão de linha.

  • Se uma transação estiver executando em isolamento de instantâneo, um XSN será atribuído quando alguma instrução de linguagem de manipulação de dados (DML), inclusive uma operação SELECT, for executada.

Números de seqüência de transação são incrementados em série para cada transação iniciada em uma instância de Mecanismo de Banco de Dados.

Para obter mais informações sobre números de seqüência de transação, consulte Compreendendo níveis de isolamento com base em controle de versão de linha.

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 o isolamento serializável.

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

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

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

A consulta a seguir é executada.

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;

Aqui está o conjunto de resultados.

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

As informações a seguir avaliam os resultados de sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Como esta transação não está sendo executada em isolamento de instantâneo, o valor de is_snapshot e de first_snapshot_sequence_num são 0. transaction_sequence_num mostra que um número de seqüência de transação foi atribuído à transação, porque uma ou ambas as opções de banco de dados ALLOW_SNAPSHOT_ISOLATION ou READ_COMMITTED_SNAPSHOT são ON.

  • XSN-58: Esta transação não está sendo executada em isolamento de instantâneo, aplicando-se as mesma informações do XSN-57.

  • XSN-59: Esta é a primeira transação ativa que está sendo executada em isolamento de instantâneo. Esta transação lê dados confirmados antes de XSN-57, como indicado por first_snapshot_sequence_num. A saída desta transação também mostra que a cadeia de versões máxima atravessada para uma linha é 1, tendo atravessado uma média de 1 versão para cada linha que é acessada. Isso significa que as transações XSN-57, XSN-58 e XSN-60 não modificaram filas e foram confirmadas.

  • XSN-60: Esta é a segunda transação que está sendo executada em isolamento de instantâneo. A saída mostra as mesmas informações de XSN-59.