Delen via


sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

In een SQL Server-instantie levert deze dynamische beheerweergave een virtuele tabel voor alle actieve transacties die rijversies genereren of mogelijk toegang krijgen. Transacties zijn inbegrepen voor een of meer van de volgende voorwaarden:

  • Wanneer een of beide ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT databaseopties op AAN staan:

    • Er is één rij voor elke transactie die draait onder snapshot isolatieniveau, of read-committed isolatieniveau dat gebruikmaakt van rijversiebeheersing.

    • Er is één rij per transactie die ervoor zorgt dat er een rijversie wordt aangemaakt in de huidige database. De transactie genereert bijvoorbeeld een rijversie door een rij in de huidige database bij te werken of te verwijderen.

  • Wanneer een trigger wordt geactiveerd, is er één rij voor de transactie waaronder de trigger wordt uitgevoerd.

  • Wanneer een online indexeringsprocedure draait, is er één rij voor de transactie die de index aanmaakt.

  • Wanneer de sessie Multiple Active Results Sets (MARS) is ingeschakeld, is er voor elke transactie één rij die rijversies benadert.

Deze dynamische beheerweergave omvat geen systeemtransacties.

Opmerking

Om dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW), 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.

Syntaxis

  
sys.dm_tran_active_snapshot_database_transactions  

Tabel geretourneerd

Kolomnaam Gegevenstype Description
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 Transactiesequentienummer. Dit is een uniek volgnummer dat aan een transactie wordt toegekend wanneer deze begint. Transacties die geen versierecords genereren en geen snapshotscans gebruiken, ontvangen geen transactiesequentienummer.
commit_sequence_num bigint Volgnummer dat aangeeft wanneer de transactie is afgerond (commit of stopt). Voor actieve transacties is de waarde NULL.
is_snapshot int 0 = Is geen snapshot-isolatietransactie.

1 = Is een snapshot-isolatietransactie.
session_id int ID van de sessie die de transactie startte.
first_snapshot_sequence_num bigint Laagste transactiesequentienummer van de transacties die actief waren toen een snapshot werd genomen. Bij uitvoering maakt een snapshottransactie een snapshot van alle actieve transacties op dat moment. Voor niet-snapshottransacties toont deze kolom 0.
max_version_chain_traversed int Maximale lengte van de versieketen die wordt doorlopen om de transactioneel consistente versie te vinden.
average_version_chain_traversed echte Gemiddeld aantal rijversies in de versie-ketens die worden doorlopen.
elapsed_time_seconds bigint Verstreken tijd sinds de transactie zijn transactiesequentienummer heeft gekregen.
pdw_node_id int van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW)

De id voor het knooppunt waarop deze distributie zich bevindt.

Permissions

Voor SQL Server en SQL Managed Instance is een machtiging vereist VIEW SERVER STATE .

Voor servicedoelstellingen van SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverrol 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 de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.

Opmerkingen

sys.dm_tran_active_snapshot_database_transactions rapporteert transacties die een transactievolgnummer (XSN) hebben toegewezen. De XSN wordt toegewezen wanneer de transactie voor het eerst toegang krijgt tot de versiewinkel. In een database die is ingeschakeld voor snapshot-isolatie of read committed isolatie met behulp van rijversiebeheer, tonen de voorbeelden wanneer een XSN aan een transactie wordt toegewezen:

  • Als een transactie draait op serialiseerbaar isolatieniveau, wordt een XSN toegewezen wanneer de transactie voor het eerst een instructie uitvoert, zoals een UPDATE-operatie, die een rijversie veroorzaakt.

  • Als een transactie onder snapshot-isolatie draait, wordt een XSN toegewezen wanneer een data manipulation language (DML)-instructie, inclusief een SELECT-operatie, wordt uitgevoerd.

Transactiesequentienummers worden seriëel verhoogd voor elke transactie die wordt gestart in een instantie van de Database Engine.

Voorbeelden

Het volgende voorbeeld gebruikt een testscenario waarin vier gelijktijdige transacties, elk geïdentificeerd door een transactiesequentienummer (XSN), draaien in een database met de ALLOW_SNAPSHOT_ISOLATION en READ_COMMITTED_SNAPSHOT opties op ON. De volgende transacties draaien:

  • XSN-57 is een update-operatie onder serialiseerbare isolatie.

  • XSN-58 is hetzelfde als XSN-57.

  • XSN-59 is een select-operatie onder snapshot isolatie

  • XSN-60 is hetzelfde als XSN-59.

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;  

Hier is het resultatenoverzicht.

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  

De volgende informatie beoordeelt de resultaten van sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Omdat deze transactie niet onder snapshot-isolatie draait, zijn de is_snapshot waarde en first_snapshot_sequence_num .0 transaction_sequence_num toont aan dat een transactiesequentienummer aan deze transactie is toegewezen, omdat één of beide databaseopties ALLOW_SNAPSHOT_ISOLATION of READ_COMMITTED_SNAPSHOT AAN zijn.

  • XSN-58: Deze transactie draait niet onder snapshot-isolatie en dezelfde informatie geldt voor XSN-57.

  • XSN-59: Dit is de eerste actieve transactie die onder snapshot-isolatie draait. Deze transactie leest gegevens die vóór XSN-57 zijn gecommit, zoals aangegeven door first_snapshot_sequence_num. De output voor deze transactie toont ook de maximale versieketen die voor een rij wordt doorlopen en 1 heeft een gemiddelde versie 1 doorlopen voor elke rij die wordt benaderd. Dit betekent dat transacties XSN-57, XSN-58 en XSN-60 geen rijen hebben aangepast en gecommit.

  • XSN-60: Dit is de tweede transactie die onder snapshot-isolatie draait. De output toont dezelfde informatie als die van XSN-59.

Zie ook

TRANSACTIEISOLATIENIVEAU (Transact-SQL) instellen
Dynamische beheerweergaven en -functies (Transact-SQL)
dynamische beheerweergaven en -functies met betrekking tot transacties (Transact-SQL)