Sdílet prostřednictvím


sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

V instanci SQL Serveru tento dynamický pohled správy vrací virtuální tabulku pro všechny aktivní transakce, které generují nebo potenciálně přistupují k verzím řádků. Transakce jsou zahrnuty za jedné nebo více z následujících podmínek:

  • Když jsou ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT databázové možnosti nastaveny na ZAPNUTO:

    • Existuje jeden řádek pro každou transakci, která běží pod úrovní izolace snapshotu, nebo na úrovni izolace s potvrzením čtení, která používá verzování řádků.

    • Pro každou transakci je jeden řádek, který způsobuje vytvoření verze řádku v aktuální databázi. Například transakce generuje verzi řádku aktualizací nebo smazáním řádku v aktuální databázi.

  • Když je spouštěč aktivován, existuje jeden řádek pro transakci, pod kterým se spoušť vykonává.

  • Když běží online indexační procedura, existuje jeden řádek pro transakci, která index vytváří.

  • Když je povolena relace Multiple Active Results Sets (MARS), existuje jeden řádek pro každou transakci, která přistupuje k verzemi řádku.

Tento dynamický pohled na správu nezahrnuje systémové transakce.

Poznámka:

Pro volání z Azure Synapse Analytics nebo Analytics Platform System (PDW) použijte název sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.

Syntaxe

  
sys.dm_tran_active_snapshot_database_transactions  

Vrácená tabulka

Název sloupce Datový typ Description
transaction_id bigint Jedinečné identifikační číslo přidělené pro transakci. ID transakce se primárně používá k identifikaci transakce při operacích uzamčení.
transaction_sequence_num bigint Pořadové číslo transakce. Jedná se o jedinečné pořadové číslo, které je přiřazeno transakci při jejím zahájení. Transakce, které negenerují záznamy o verzi a nepoužívají snapshot scany, neobdrží pořadové číslo transakce.
commit_sequence_num bigint Pořadové číslo, které ukazuje, kdy transakce skončí (commituje nebo zastaví). Pro aktivní transakce je hodnota NULL.
is_snapshot int 0 = Není to transakce izolace snímku.

1 = Je transakce izolace snímku.
session_id int ID relace, která transakci spustila.
first_snapshot_sequence_num bigint Nejnižší sekvenční číslo transakcí z transakcí, které byly aktivní v době pořízení snapshotu. Při provedení snapshot transakce pořídí snímek všech aktivních transakcí v daném okamžiku. Pro transakce bez snapshotů tento sloupec ukazuje 0.
max_version_chain_traversed int Maximální délka řetězce verzí, kterou procházíme, aby se našla transakční konzistentní verze.
average_version_chain_traversed skutečné Průměrný počet verzí řádků v řetězcích verzí, které jsou procházeny.
elapsed_time_seconds bigint Uplynula doba od získání pořadového čísla transakce.
pdw_node_id int platí pro: Azure Synapse Analytics, Analytics Platform System (PDW)

Identifikátor uzlu, na který je tato distribuce zapnutá.

Povolení

Na SQL Serveru a službě SQL Managed Instance vyžaduje VIEW SERVER STATE oprávnění.

U cílů služby SQL Database Basic, S0 a S1 a pro databáze v elastických fondech se vyžaduje účet správce serveru , účet správce Microsoft Entra nebo členství v ##MS_ServerStateReader##roli serveru . U všech ostatních cílů VIEW DATABASE STATE služby SQL Database se vyžaduje buď oprávnění k databázi, nebo členství v ##MS_ServerStateReader## roli serveru.

Oprávnění pro SQL Server 2022 a novější

Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.

Poznámky

sys.dm_tran_active_snapshot_database_transactions hlásí transakce, kterým je přiřazeno sekvenční číslo transakce (XSN). XSN je přiřazeno, když transakce poprvé přistupuje k úložišti verzí. V databázi, která je povolena pro izolaci snapshotů nebo pro uzavřenou izolaci čtení pomocí verzování řádků, příklady ukazují, kdy je XSN přiřazeno k transakci:

  • Pokud transakce běží na úrovni serializovatelné izolace, XSN je přiřazeno při prvním spuštění příkazu, například operace UPDATE, která způsobí vytvoření verze řádku.

  • Pokud transakce běží v izolaci snapshotu, je přiřazeno XSN při vykonání jakéhokoli příkazu jazyka pro manipulaci s daty (DML), včetně operace SELECT.

Čísla pořadí transakcí jsou sériově zvyšována pro každou transakci, která je zahájena v instanci databázového enginu.

Examples

Následující příklad používá testovací scénář, ve kterém v databázi běží čtyři souběžné transakce, každá označená sekvenčním číslem transakce (XSN), která má nastavené možnosti ALLOW_SNAPSHOT_ISOLATION a READ_COMMITTED_SNAPSHOT na ON. Probíhají následující transakce:

  • XSN-57 je aktualizační operace v rámci serializovatelné izolace.

  • XSN-58 je stejný jako XSN-57.

  • XSN-59 je vybraná operace s izolací snímku

  • XSN-60 je stejný jako XSN-59.

Následující dotaz je vykonán.

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;  

Tady je soubor výsledků.

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  

Následující informace hodnotí výsledky z sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Protože tato transakce neprobíhá pod izolací snapshotu, hodnoty is_snapshot a first_snapshot_sequence_num jsou 0. transaction_sequence_num ukazuje, že této transakci bylo přiřazeno sekvenční číslo transakce, protože jedna nebo obě ALLOW_SNAPSHOT_ISOLATION nebo READ_COMMITTED_SNAPSHOT možnosti databáze jsou ZAPNUTÉ.

  • XSN-58: Tato transakce neprobíhá pod izolací snapshot a platí stejné informace pro XSN-57.

  • XSN-59: Toto je první aktivní transakce, která běží pod izolací snímků. Tato transakce čte data, která byla potvrzena před XSN-57, jak je indikováno .first_snapshot_sequence_num Výstup této transakce také ukazuje maximální řetězec verzí, který je pro řádek procházen, a 1 průměr 1 verzí pro každý přístupný řádek. To znamená, že transakce XSN-57, XSN-58 a XSN-60 nemodifikovaly řádky ani nebyly commitovány.

  • XSN-60: Toto je druhá transakce běžící pod izolací snímků. Výstup ukazuje stejné informace jako XSN-59.

Viz také

NASTAVIT ÚROVEŇ IZOLACE TRANSAKCÍ (Transact-SQL)
zobrazení a funkce dynamické správy (Transact-SQL)
Zobrazení a funkce dynamické správy související s transakcemi (Transact-SQL)