sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-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_ISOLATION databaseopties READ_COMMITTED_SNAPSHOT zijn ON:

    • 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 UPDATE of operatie DELETE .

  • Een transactie die onder snapshot-isolatie draait, krijgt een XSN toegewezen wanneer deze voor het eerst een snapshot voor gegevenstoegang opzet, bijvoorbeeld via een SELECT die een gebruikerstabel leest. BEGIN TRANSACTION alleen 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 UPDATE onderserialiseerbare isolatie uit en blijft niet toegewijd.
  • XSN-58 voert een andere UPDATE uit onder serialiseerbare isolatie en blijft niet toegewijd.
  • XSN-59 voert een SELECT onder-snapshot isolatie uit en blijft open.
  • XSN-60 voert een andere SELECT uit 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. De UPDATE instructies die binnen deze transacties worden uitgevoerd, genereren rijversies omdat de snapshotopties van de database zijn ON. Deze versiegeneratie zorgt ervoor dat transactiesequentienummers worden toegewezen. Geen van beide transacties bevat in dit voorbeeld een snapshot, dus first_snapshot_sequence_num is NULL.

  • XSN-59 en XSN-60 hebben is_snapshot = 1. Hun waarde van 57 identificeert de oudste transactie die first_snapshot_sequence_num als 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.