Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Database 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_ISOLATIONe leREAD_COMMITTED_SNAPSHOTopzioni del database sonoON: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
UPDATEoDELETE.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
SELECTche legge una tabella utente.BEGIN TRANSACTIONda 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
UPDATEisolamento sotto serializzazione e rimane non commesso. - XSN-58 ne esegue un altro
UPDATEsotto isolamento serializzato e rimane non confermato. - XSN-59 esegue un
SELECTisolamento sotto snapshot e rimane aperto. - XSN-60 ne esegue un altro
SELECTsotto 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. LeUPDATEistruzioni eseguite all'interno di queste transazioni generano versioni di riga perché le opzioni di snapshot del database sonoON. Questa generazione di versioni comporta l'assegnazione dei numeri di sequenza delle transazioni. Nessuna delle due transazioni contiene uno snapshot in questo esempio, quindifirst_snapshot_sequence_numè NULL.XSN-59 e XSN-60 hanno
is_snapshot = 1. Il lorofirst_snapshot_sequence_numvalore di57identifica 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.