Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-database in Microsoft Fabric
Deze dynamische beheerweergave geeft informatie terug over transacties die zijn geregistreerd voor rijversiebeheer en een transactiesequentienummer (XSN) toegewezen. Transacties kunnen onder een of meer van de volgende voorwaarden worden opgenomen:
Wanneer een van beide of beide
ALLOW_SNAPSHOT_ISOLATIONdatabaseoptiesREAD_COMMITTED_SNAPSHOTzijnON:Transacties die een snapshot opzetten onder snapshot isolatie of read committed isolatie met behulp van rijversiebeheer.
Transacties die rijversies genereren, bijvoorbeeld door rijen bij te werken of te verwijderen in een database met deze opties ingeschakeld.
Transacties die rijversies genereren of toegang krijgen voor triggers.
Transacties die gebruikmaken van rijversiebeheer tijdens online indexoperaties.
Transacties die gebruikmaken van rijversiebeheer in een Multiple Active Result Sets (MARS)-sessie.
In SQL Server 2019 (15.x) en latere versies worden transacties die gegevens wijzigen in een database met versneld databaseherstel (ADR) ingeschakeld, zelfs als beide snapshot-databaseopties
OFF.
Deze dynamische beheerweergave omvat geen systeemtransacties. Voltooide transacties kunnen kort verschijnen tijdens gelijktijdige enumeratie of het opruimen van transacties.
Note
Om dit van Azure Synapse Analytics te noemen, gebruik de naam sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.
Syntax
sys.dm_tran_active_snapshot_database_transactions
Tabel geretourneerd
| Kolomnaam | Gegevenstype | Beschrijving |
|---|---|---|
transaction_id |
bigint |
Uniek identificatienummer toegewezen aan de transactie. De transactie-ID wordt voornamelijk gebruikt om de transactie te identificeren bij vergrendelingsoperaties. |
transaction_sequence_num |
bigint |
Uniek volgnummer dat wordt toegekend wanneer de transactie voor het eerst rijversiebeheer vereist. Transacties die noch rijversies genereren noch snapshotscans gebruiken, krijgen geen transactiesequentienummer toegewezen. |
commit_sequence_num |
bigint |
Altijd NULL in deze weergave. |
session_id |
int |
ID van de sessie die aan de transactie gekoppeld is. |
is_snapshot |
bit |
0 = Is geen snapshot-isolatietransactie. 1 = Is een snapshot-isolatietransactie. |
first_snapshot_sequence_num |
bigint |
Het laagste transactiesequentienummer dat als actief wordt geregistreerd in de momentopnames die momenteel door de transactie worden vastgehouden. Bevat snapshots op transactie- en statementniveau. NULL als zo'n volgnummer niet wordt geregistreerd. |
max_version_chain_traversed |
int |
Maximaal aantal rijversies dat in één versieketen door de transactie wordt doorlopen. Geeft 0 terug als er geen rijversies worden doorlopen. |
average_version_chain_traversed |
float |
Gemiddeld aantal rijversies dat per versie-keten doorloopt door de transactie. Traversalen van lengte 0 zijn uitgesloten. Geeft 0 terug als er geen rijversies worden doorlopen. |
elapsed_time_seconds |
bigint |
Verstreken tijd, in seconden, sinds de transactie het transactiesequentienummer heeft verkregen. |
pdw_node_id |
int |
van toepassing op: Azure Synapse Analytics De id voor het knooppunt waarop deze distributie zich bevindt. |
Permissions
Voor SQL Server en SQL Managed Instance is VIEW SERVER STATE machtiging vereist.
Op SQL Database Basic, S0en S1 servicedoelstellingen, en voor databases in elastische pools, is het serverbeheerder--account, het Microsoft Entra-beheerdersaccount of lidmaatschap van de ##MS_ServerStateReader##-server functie vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader##-serverfunctie vereist.
Machtigingen voor SQL Server 2022 en hoger
Vereist VIEW SERVER PERFORMANCE STATE machtiging op de server.
Opmerkingen
sys.dm_tran_active_snapshot_database_transactions rapporteert transacties toegewezen aan een transactievolgnummer (XSN) voor rijversiebeheer. Een XSN wordt toegewezen wanneer de transactie eerst rijversiebeheer vereist, niet noodzakelijk wanneer het de versieopslag start of fysiek toegang heeft.
In een database met ALLOW_SNAPSHOT_ISOLATION of READ_COMMITTED_SNAPSHOT ingeschakeld zijn voorbeelden onder andere:
Een transactie die onder serialiseerbare isolatie draait, krijgt een XSN toegewezen wanneer deze voor het eerst rijversies genereert, bijvoorbeeld via een
UPDATEof operatieDELETE.Een transactie die onder snapshot-isolatie draait, krijgt een XSN toegewezen wanneer deze voor het eerst een snapshot voor gegevenstoegang opzet, bijvoorbeeld via een
SELECTdie een gebruikerstabel leest.BEGIN TRANSACTIONalleen wijst geen XSN toe.
XSN's worden toegewezen vanaf een instance-breed toenemende teller. Dezelfde teller wordt gebruikt voor snapshots op instructieniveau, dus transactie-XSN's hoeven niet opeenvolgend te zijn.
Examples
Het volgende voorbeeld illustreert vier gelijktijdige transacties in een database met ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT gezet op ON:
- XSN-57 voert een
UPDATEonderserialiseerbare isolatie uit en blijft niet toegewijd. - XSN-58 voert een andere
UPDATEuit onder serialiseerbare isolatie en blijft niet toegewijd. - XSN-59 voert een
SELECTonder-snapshot isolatie uit en blijft open. - XSN-60 voert een andere
SELECTuit onder snapshot-isolatie en blijft open.
Beide snapshottransacties maken hun snapshots vast terwijl XSN-57 en XSN-58 actief zijn. Hun statements bevatten SELECT eerdere versies van rijen die door de niet-committed updates zijn aangepast.
De volgende query wordt uitgevoerd:
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;
De volgende output is illustratief. Werkelijke identificaties, volgnummers, statistieken en verstreken tijden variëren.
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
De resultaten tonen het volgende:
XSN-57 en XSN-58 gebruiken serialiseerbare isolatie, dus
is_snapshot = 0. DeUPDATEinstructies die binnen deze transacties worden uitgevoerd, genereren rijversies omdat de snapshotopties van de database zijnON. Deze versiegeneratie zorgt ervoor dat transactiesequentienummers worden toegewezen. Geen van beide transacties bevat in dit voorbeeld een snapshot, dusfirst_snapshot_sequence_numis NULL.XSN-59 en XSN-60 hebben
is_snapshot = 1. Hun waarde van57identificeert de oudste transactie diefirst_snapshot_sequence_numals actief werd geregistreerd toen hun snapshots werden gemaakt.Voor XSN-59 en XSN-60 zijn de maximale en gemiddelde doorlooplengtes van de versie-keten beide
1. Elke geregistreerde doorgang bezocht één rijversie. Het gemiddelde wordt berekend over traversals die ten minste één rijversie bezoeken.XSN-59 en XSN-60 lazen eerdere gecommitteerde versies van de rijen die waren aangepast door XSN-57 en XSN-58, die nog niet waren toegewijd toen beide snapshots werden opgezet.