Partilhar via


sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Aplica-se a:Banco de Dados SQL doAzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Banco de Dados SQL no Microsoft Fabric

Numa instância de SQL Server, esta vista de gestão dinâmica devolve uma tabela virtual para todas as transações ativas que geram ou potencialmente acedem a versões da linha. As transações são incluídas para uma ou mais das seguintes condições:

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

    • Existe uma linha para cada transação que está a correr sob o nível de isolamento de snapshot, ou nível de isolamento read-commit que utiliza versionamento de linha.

    • Existe uma linha para cada transação que faz com que uma versão de linha seja criada na base de dados atual. Por exemplo, a transação gera uma versão de linha ao atualizar ou eliminar uma linha na base de dados atual.

  • Quando um gatilho é disparado, existe uma linha para a transação sob a qual o gatilho está a ser executado.

  • Quando está a correr um procedimento de indexação online, existe uma linha para a transação que está a criar o índice.

  • Quando a sessão Multiple Active Results Sets (MARS) está ativada, existe uma linha para cada transação que está a aceder às versões da linha.

Esta vista de gestão dinâmica não inclui transações do sistema.

Observação

Para chamar isto de Azure Synapse Analytics ou Analytics Platform System (PDW), use o nome sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.

Sintaxe

  
sys.dm_tran_active_snapshot_database_transactions  

Tabela retornada

Nome da coluna Tipo de dados Description
transaction_id bigint Número de identificação único atribuído para a transação. O ID da transação é usado principalmente para identificar a transação nas operações de bloqueio.
transaction_sequence_num bigint Número de sequência da transação. Este é um número de sequência único que é atribuído a uma transação quando esta começa. Transações que não geram registos de versão e não utilizam digitalizações instantâneas 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 (commit ou para). Para transações ativas, o valor é NULL.
is_snapshot int 0 = Não é uma transação de isolamento instantânea.

1 = É uma transação de isolamento de instantâneos.
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 foi tirada uma captura. Na execução, uma transação snapshot tira um snapshot de todas as transações ativas nesse momento. Para transações não snapshot, esta coluna mostra 0.
max_version_chain_traversed int Comprimento máximo da cadeia de versões que é percorrida para encontrar a versão transacionalmente consistente.
average_version_chain_traversed real Número médio de versões de linhas nas cadeias de versões que são percorridas.
elapsed_time_seconds bigint Tempo decorrido desde que a transação recebeu o número de sequência da transação.
pdw_node_id int Aplica-se a: Azure Synapse Analytics, Analytics Platform System (PDW)

O identificador do nó em que esta distribuição se encontra.

Permissions

No SQL Server e na Instância Gerenciada do SQL, requer VIEW SERVER STATE permissão.

No Banco de Dados SQL Basic, S0e S1 objetivos de serviço e para bancos de dados em pools elásticos , a conta de de administrador do servidor, a conta de de administrador do Microsoft Entra ou a associação aode função de servidor ##MS_ServerStateReader## é necessária. Em todos os outros objetivos de serviço do Banco de dados SQL, é necessária a permissão VIEW DATABASE STATE no banco de dados ou a associação à função de servidor ##MS_ServerStateReader##.

Permissões para SQL Server 2022 e posterior

Requer a permissão VIEW SERVER PERFORMANCE STATE no servidor.

Observações

sys.dm_tran_active_snapshot_database_transactions reporta transações que recebem um número de sequência de transação (XSN). O XSN é atribuído quando a transação acede pela primeira vez à loja de versões. Numa base de dados que está ativada para isolamento de snapshots ou isolamento de leitura comprometida usando versionamento de linhas, os exemplos mostram quando um XSN é atribuído a uma transação:

  • Se uma transação estiver a correr ao nível de isolamento serializável, um XSN é atribuído quando a transação executa pela primeira vez uma instrução, como uma operação UPDATE, que provoca a criação de uma versão de linha.

  • Se uma transação estiver a correr sob isolamento instantâneo, é atribuída uma XSN quando qualquer instrução de linguagem de manipulação de dados (DML), incluindo uma operação SELECT, é executada.

Os números de sequência das transações são incrementados em série para cada transação iniciada numa instância do Motor de Base de Dados.

Examples

O exemplo seguinte utiliza um cenário de teste em que quatro transações concorrentes, cada uma identificada por um número de sequência de transação (XSN), estão a correr numa base de dados que tem as opções ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT definidas para ON. As seguintes transações estão a decorrer:

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

  • O XSN-58 é igual ao XSN-57.

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

  • O XSN-60 é igual ao XSN-59.

A seguinte consulta é 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  

A informação seguinte avalia os resultados de sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Como esta transação não está a correr sob isolamento instantâneo, o is_snapshot valor e first_snapshot_sequence_num são 0. transaction_sequence_num mostra que um número de sequência de transação foi atribuído a esta transação, porque uma ou ambas as opções de base de dados ALLOW_SNAPSHOT_ISOLATION ou READ_COMMITTED_SNAPSHOT estão ATIVADAS.

  • XSN-58: Esta transação não está a correr sob isolamento de snapshot e aplica-se a mesma informação para o XSN-57.

  • XSN-59: Esta é a primeira transação ativa a correr sob isolamento de snapshot. Esta transação lê dados comprometidos antes do XSN-57, conforme indicado por first_snapshot_sequence_num. A saída desta transação também mostra a cadeia máxima de versões percorrida por uma linha é 1 e percorreu uma média de 1 versões para cada linha acedida. Isto significa que as transações XSN-57, XSN-58 e XSN-60 não modificaram linhas nem foram confirmadas.

  • XSN-60: Esta é a segunda transação a correr sob isolamento de snapshot. A saída mostra a mesma informação que o XSN-59.

Ver também

DEFINIR O NÍVEL DE ISOLAMENTO DA TRANSAÇÃO (Transact-SQL)
Visões e funções de gerenciamento dinâmico (Transact-SQL)
Visualizações e funções de gerenciamento dinâmico relacionadas à transação (Transact-SQL)