sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

I en SQL Server-instans returnerar denna dynamiska hanteringsvy en virtuell tabell för alla aktiva transaktioner som genererar eller potentiellt får tillgång till radversioner. Transaktioner ingår under ett eller flera av följande villkor:

  • När antingen eller båda ALLOW_SNAPSHOT_ISOLATION och READ_COMMITTED_SNAPSHOT databasalternativ är inställda på PÅ:

    • Det finns en rad för varje transaktion som körs under snapshot isolation-nivå, eller read-committed isolation-nivå som använder radversionering.

    • Det finns en rad för varje transaktion som gör att en radversion skapas i den aktuella databasen. Till exempel genererar transaktionen en radversion genom att uppdatera eller ta bort en rad i den aktuella databasen.

  • När en trigger utlöses finns det en rad för transaktionen under vilken triggern körs.

  • När en online-indexeringsprodur körs finns det en rad för transaktionen som skapar indexet.

  • När sessionen Multiple Active Results Sets (MARS) är aktiverad finns det en rad för varje transaktion som får tillgång till radversioner.

Denna dynamiska hanteringsvy inkluderar inte systemtransaktioner.

Anmärkning

För att kalla detta från Azure Synapse Analytics eller Analytics Platform System (PDW), använd namnet sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

Syntax

  
sys.dm_tran_active_snapshot_database_transactions  

Tabell returnerad

Kolumnnamn Datatyp Description
transaction_id bigint Unikt identifikationsnummer tilldelat för transaktionen. Transaktions-ID används främst för att identifiera transaktionen i låsningsoperationer.
transaction_sequence_num bigint Transaktionssekvensnummer. Detta är ett unikt sekvensnummer som tilldelas en transaktion när den startar. Transaktioner som inte genererar versionsposter och inte använder snapshot-skanningar kommer inte att få något transaktionssekvensnummer.
commit_sequence_num bigint Sekvensnummer som anger när transaktionen avslutas (commits eller stoppas). För aktiva transaktioner är värdet NULL.
is_snapshot int 0 = Är inte en snapshot-isoleringstransaktion.

1 = Är en ögonblicksbildsisoleringstransaktion.
session_id int ID för sessionen som startade transaktionen.
first_snapshot_sequence_num bigint Lägsta transaktionssekvensnummer för de transaktioner som var aktiva när en ögonblicksbild togs. Vid exekvering tar en ögonblicksbild av en ögonblicksbild av alla aktiva transaktioner vid den tidpunkten. För icke-snapshot-transaktioner visar denna kolumn 0.
max_version_chain_traversed int Maximal längd på versionskedjan som genomgår för att hitta den transaktionellt konsistente versionen.
average_version_chain_traversed riktiga Genomsnittligt antal radversioner i versionskedjorna som går igenom.
elapsed_time_seconds bigint Förfluten tid sedan transaktionen fick sitt transaktionssekvensnummer.
pdw_node_id int gäller för: Azure Synapse Analytics, Analytics Platform System (PDW)

Identifieraren för noden som den här fördelningen är på.

Permissions

På SQL Server och SQL Managed Instance kräver VIEW SERVER STATE behörighet.

I SQL Database Grundläggande, S0och S1 tjänstmål och för databaser i elastiska pooler, serveradministratör konto, Microsoft Entra-administratör konto eller medlemskap i ##MS_ServerStateReader##serverrollen krävs. För alla andra SQL Database-tjänstmål krävs antingen VIEW DATABASE STATE behörighet för databasen eller medlemskap i ##MS_ServerStateReader## serverrollen.

Behörigheter för SQL Server 2022 och senare

Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.

Anmärkningar

sys.dm_tran_active_snapshot_database_transactions rapporterar transaktioner som tilldelas ett transaktionssekvensnummer (XSN). XSN tilldelas när transaktionen först går in i versionslagret. I en databas som är aktiverad för snapshot-isolering eller läs-committerad isolering med radversionering visas exemplen när ett XSN tilldelas en transaktion:

  • Om en transaktion körs på serialiserbar isoleringsnivå tilldelas ett XSN när transaktionen först utför ett sätt, såsom en UPDATE-operation, som orsakar att en radversion skapas.

  • Om en transaktion körs under snapshot-isolering tilldelas ett XSN när någon data manipulation language (DML)-sats, inklusive en SELECT-operation, körs.

Transaktionssekvensnummer ökar successivt för varje transaktion som startas i en instans av databasmotorn.

Examples

Följande exempel använder ett testscenario där fyra samtidiga transaktioner, var och en identifierad med ett transaktionssekvensnummer (XSN), körs i en databas där ALLOW_SNAPSHOT_ISOLATION och READ_COMMITTED_SNAPSHOT alternativen är inställda på ON. Följande transaktioner körs:

  • XSN-57 är en uppdateringsoperation under serialiserbar isolering.

  • XSN-58 är samma som XSN-57.

  • XSN-59 är en select-operation under snapshot isolation

  • XSN-60 är samma som XSN-59.

Följande fråga exekveras.

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;  

Här är resultatet.

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  

Följande information utvärderar resultaten från sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Eftersom denna transaktion inte körs under snapshot-isolering is_snapshot är 0värdet och first_snapshot_sequence_num . transaction_sequence_num visar att ett transaktionssekvensnummer har tilldelats denna transaktion, eftersom ett eller båda ALLOW_SNAPSHOT_ISOLATION eller READ_COMMITTED_SNAPSHOT databasalternativ är PÅ.

  • XSN-58: Denna transaktion körs inte under snapshot-isolering och samma information gäller för XSN-57.

  • XSN-59: Detta är den första aktiva transaktionen som körs under snapshot-isolering. Denna transaktion läser data som är committerad före XSN-57, enligt .first_snapshot_sequence_num Utdata för denna transaktion visar också att den maximala versionskedjan som genomgår för en rad är 1 och har gått igenom ett genomsnitt av 1 version för varje rad som åtkoms. Detta innebär att transaktionerna XSN-57, XSN-58 och XSN-60 inte har modifierat rader och committat.

  • XSN-60: Detta är den andra transaktionen som körs under snapshot-isolering. Utgången visar samma information som XSN-59.

Se även

ANGE TRANSAKTIONSISOLERINGSNIVÅ (Transact-SQL)
Dynamiska hanteringsvyer och funktioner (Transact-SQL)
transaktionsrelaterade dynamiska hanteringsvyer och funktioner (Transact-SQL)