sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
Em uma instância do SQL Server, essa exibição de gerenciamento dinâmico retorna uma tabela virtual para todas as transações ativas que geram ou potencialmente acessam versões de linha. 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.
Observação
Para chamar isso do Azure Synapse Analytics ou do PDW (Analytics Platform System), use o nome sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.
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 sequência da transação. Trata-se de um número de sequê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 sequência de transação. |
commit_sequence_num | bigint | Número de sequê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 sequê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 sequência de transação. |
pdw_node_id | int | Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW) O identificador do nó em que essa distribuição está ativada. |
Permissões
No SQL Server e na Instância Gerenciada de SQL, requer a permissão VIEW SERVER STATE
.
Nos objetivos de serviço do Banco de Dados SQL Básico, S0 e S1 e para bancos de dados em pools elásticos, é necessário ter a conta do administrador do servidor, a conta do administrador do Microsoft Entra ou a associação à ##MS_ServerStateReader##
função de servidor. Em todos os outros objetivos de serviço do Banco de Dados SQL, a permissão VIEW DATABASE STATE
no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##
são necessárias.
Permissões do SQL Server 2022 e posteriores
É necessária a permissão VIEW SERVER PERFORMANCE STATE no servidor.
Comentários
sys.dm_tran_active_snapshot_database_transactions relata transações que recebem um número de sequência de transação (XSN). 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.
Os números de sequência de transação são incrementados em série para cada transação iniciada em uma instância do Mecanismo de Banco de Dados.
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 sequê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;
Veja a seguir 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 essa transação não está sendo executada no isolamento de instantâneo, o valor e
first_snapshot_sequence_num
sãois_snapshot
0
. Otransaction_sequence_num
mostra que um número de sequência de transação foi atribuído a esta transação, pois uma ou ambas as opções de banco de dados ALLOW_SNAPSHOT_ISOLATION e 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 de1
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.
Confira também
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Exibições e funções de gerenciamento dinâmico (Transact-SQL)
Funções e exibições de gerenciamento dinâmico relacionadas à transação (Transact-SQL)