sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsDatabase SQL in Microsoft Fabric

Questa vista di gestione dinamica restituisce informazioni sulle transazioni registrate per il versioning delle righe e assegnate a un numero di sequenza di transazione (XSN). Le transazioni possono essere incluse in una o più delle seguenti condizioni:

  • Quando uno o entrambi ALLOW_SNAPSHOT_ISOLATION e le READ_COMMITTED_SNAPSHOT opzioni del database sono ON:

    • Transazioni che stabiliscono uno snapshot sotto isolamento snapshot o leggono l'isolamento valido tramite versioning di righe.

    • Transazioni che generano versioni di righe, ad esempio aggiornando o eliminando righe in un database con queste opzioni attivate.

  • Transazioni che generano o accedono alle versioni della riga per i trigger.

  • Transazioni che utilizzano il versioning delle righe durante le operazioni di indice online.

  • Transazioni che utilizzano il versioning delle righe in una sessione Multiple Active Result Sets (MARS).

  • In SQL Server 2019 (15.x) e versioni successive, le transazioni che modificano i dati in un database con il recupero accelerato del database (ADR) abilitato, anche quando entrambe le opzioni di snapshot database sono OFF.

Questa vista di gestione dinamica non include le transazioni di sistema. Le transazioni completate possono apparire brevemente durante l'enumerazione o la pulizia delle transazioni simultanee.

Note

Per chiamare questo da Azure Synapse Analytics, usa il nome sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Sintassi

sys.dm_tran_active_snapshot_database_transactions  

Tabella restituita

Nome della colonna Tipo di dati Descrzione
transaction_id bigint Numero di identificazione univoco assegnato alla transazione. L'ID transazione viene principalmente utilizzato per identificare la transazione nelle operazioni di blocco.
transaction_sequence_num bigint Numero di sequenza univoco assegnato quando la transazione richiede per la prima volta il versioning della riga. Le transazioni che non generano versioni di riga né utilizzano scansioni snapshot non ricevono un numero di sequenza di transazione.
commit_sequence_num bigint Sempre NULLO in questa visione.
session_id int ID della sessione associata alla transazione.
is_snapshot bit 0 = Non si tratta di una transazione di isolamento dello snapshot.

1 = Si tratta di una transazione di isolamento dello snapshot.
first_snapshot_sequence_num bigint Il numero di sequenza di transazione più basso registrato come attivo nelle istantanee attualmente detenute dalla transazione. Include snapshot a livello di transazione e a livello di estratto estratto conto. NULL se non viene registrato alcun numero di sequenza di questo tipo.
max_version_chain_traversed int Numero massimo di versioni di righe attraversate in una singola catena di versioni tramite la transazione. Restituisce 0 se non vengono attraversate versioni di righe.
average_version_chain_traversed float Numero medio di versioni di righe attraversate per ogni attraversamento della catena di versioni da parte della transazione. Le traversate di lunghezza 0 sono escluse. Restituisce 0 se non vengono attraversate versioni di righe.
elapsed_time_seconds bigint Tempo trascorso, in secondi, da quando la transazione ha ottenuto il numero di sequenza della transazione.
pdw_node_id int Applica a: Azure Synapse Analytics

Identificatore del nodo in cui è attiva la distribuzione.

Permissions

In SQL Server e Istanza gestita di SQL è richiesta l'autorizzazione VIEW SERVER STATE.

Negli obiettivi del servizio Basic del Database SQL, S0 e S1 e per i database nei pool elastici, è richiesto l'account amministratore del server, l'account amministratore di Microsoft Entra o l’adesione nel ##MS_ServerStateReader## al ruolo del server. Per tutti gli altri obiettivi di servizio database SQL, è necessaria l'autorizzazione VIEW DATABASE STATE per il database o l'adesione ruolo del server ##MS_ServerStateReader##.

Autorizzazioni per SQL Server 2022 e versioni successive

È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.

Osservazioni:

sys.dm_tran_active_snapshot_database_transactions riporta le transazioni assegnato a un numero di sequenza di transazione (XSN) per il versioning delle righe. Un XSN viene assegnato quando la transazione richiede per la prima volta il versioning delle righe, non necessariamente quando inizia o accede fisicamente allo store versioni.

In un database con ALLOW_SNAPSHOT_ISOLATION o READ_COMMITTED_SNAPSHOT abilitato, esempi includono:

  • Una transazione in esecuzione sotto isolamento serializzato riceve un XSN quando genera per la prima volta le versioni della riga, ad esempio tramite un'operazione UPDATE o DELETE .

  • Una transazione in esecuzione sotto isolamento snapshot viene assegnata a un XSN quando stabilisce per la prima volta uno snapshot per l'accesso ai dati, ad esempio tramite un SELECT che legge una tabella utente. BEGIN TRANSACTION da solo non assegna un XSN.

Gli XSN vengono allocati da un contatore crescente a livello di istanza. Lo stesso contatore viene utilizzato per istantanee a livello di istruzione, quindi gli XSN delle transazioni non devono essere consecutivi.

Examples

Il seguente esempio illustra quattro transazioni concorrenti in un database con ALLOW_SNAPSHOT_ISOLATION e READ_COMMITTED_SNAPSHOT impostato a ON:

  • XSN-57 esegue un UPDATE isolamento sotto serializzazione e rimane non commesso.
  • XSN-58 ne esegue un altro UPDATE sotto isolamento serializzato e rimane non confermato.
  • XSN-59 esegue un SELECT isolamento sotto snapshot e rimane aperto.
  • XSN-60 ne esegue un altro SELECT sotto isolamento snapshot e rimane aperto.

Entrambe le transazioni snapshot stabiliscono i loro snapshot mentre XSN-57 e XSN-58 sono attivi. Le loro dichiarazioni riportavano SELECT versioni precedenti di righe modificate dagli aggiornamenti non commessi.

Viene eseguita la seguente interrogazione:

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
ORDER BY transaction_sequence_num;

Il seguente risultato è illustrativo. Identificatori effettivi, numeri di sequenza, statistiche e tempi trascorsi variano.

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
--------------  ------------------------  -------------------  -----------  ----------  ---------------------------  ---------------------------  -------------------------------  --------------------
9295            57                        NULL                 0            54          NULL                         0                            0                                419
9324            58                        NULL                 0            53          NULL                         0                            0                                397
9387            59                        NULL                 1            52          57                           1                            1                                359
9400            60                        NULL                 1            51          57                           1                            1                                333

I risultati mostrano quanto segue:

  • XSN-57 e XSN-58 utilizzano isolamento serializzato, quindi is_snapshot = 0. Le UPDATE istruzioni eseguite all'interno di queste transazioni generano versioni di riga perché le opzioni di snapshot del database sono ON. Questa generazione di versioni comporta l'assegnazione dei numeri di sequenza delle transazioni. Nessuna delle due transazioni contiene uno snapshot in questo esempio, quindi first_snapshot_sequence_num è NULL.

  • XSN-59 e XSN-60 hanno is_snapshot = 1. Il loro first_snapshot_sequence_num valore di 57 identifica la transazione più antica registrata come attiva quando sono stati creati i loro snapshot.

  • Per XSN-59 e XSN-60, le lunghezze di percorrenza massima e media della catena di versione sono entrambe 1. Ogni attraversamento registrato visitava una versione a una riga. La media viene calcolata sulle traversate che visitano almeno una versione della riga.

  • XSN-59 e XSN-60 leggevano versioni commesse precedenti delle righe modificate da XSN-57 e XSN-58, che non erano ancora state confermate quando entrambe le istantanee furono create.