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.
Consulte também