sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsBase de datos de Azure SQL en Microsoft Fabric

Esta vista de gestión dinámica devuelve información sobre las transacciones registradas para el verseado de filas y asignadas a un número de secuencia de transacción (XSN). Las transacciones pueden incluirse bajo una o más de las siguientes condiciones:

  • Cuando uno o ambos ALLOW_SNAPSHOT_ISOLATION y las READ_COMMITTED_SNAPSHOT opciones de base de datos son ON:

    • Transacciones que establecen una instantánea bajo aislamiento de instantáneas o que leen aislamiento comprometido usando versionado de filas.

    • Transacciones que generan versiones de filas, por ejemplo, actualizando o eliminando filas en una base de datos con estas opciones activadas.

  • Transacciones que generan o acceden a versiones de fila para detectar disparadores.

  • Transacciones que utilizan versionado de filas durante las operaciones de índice en línea.

  • Transacciones que utilizan versionado de filas en una sesión de Conjuntos de Resultados Activos Múltiples (MARS).

  • En SQL Server 2019 (15.x) y versiones posteriores, las transacciones que modifican datos en una base de datos con recuperación acelerada de bases de datos (ADR) activada, incluso cuando ambas opciones de base de datos instantáneas son OFF.

Esta vista de gestión dinámica no incluye las transacciones del sistema. Las transacciones completadas pueden aparecer brevemente durante la enumeración concurrente o la limpieza de transacciones.

Note

Para llamar a esto desde Azure Synapse Analytics, usa el nombre sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Syntax

sys.dm_tran_active_snapshot_database_transactions  

Tabla devuelta

Nombre de la columna Tipo de dato Descripción
transaction_id bigint Número de identificación único asignado a la transacción. El Id. de transacción se utiliza principalmente para identificar la transacción en las operaciones de bloqueo.
transaction_sequence_num bigint Número de secuencia único asignado cuando la transacción requiere por primera vez versionado de fila. Las transacciones que no generan versiones de fila ni utilizan escaneos de instantáneas no se les asigna un número de secuencia de transacción.
commit_sequence_num bigint Siempre NULO en esta visión.
session_id int ID de la sesión asociada a la transacción.
is_snapshot bit 0 = No es una transacción de aislamiento de instantánea.

1 = Es una transacción de aislamiento de instantánea.
first_snapshot_sequence_num bigint El número de secuencia de transacción más bajo registrado como activo en las instantáneas que actualmente posee la transacción. Incluye instantáneas a nivel de transacción y a nivel de instrucción. NULL si no se registra dicho número de secuencia.
max_version_chain_traversed int Número máximo de versiones de fila recorridas en una sola cadena de versiones por la transacción. Devuelve 0 si no se recorren versiones por fila.
average_version_chain_traversed float Número medio de versiones de fila recorridas por cada recorrido de la cadena de versiones por la transacción. Se excluyen los recorridos de longitud 0. Devuelve 0 si no se recorren versiones por fila.
elapsed_time_seconds bigint Tiempo transcurrido, en segundos, desde que la transacción obtuvo su número de secuencia de transacción.
pdw_node_id int Se aplica a: Azure Synapse Analytics

Identificador del nodo en el que se encuentra esta distribución.

Permissions

En SQL Server y SQL Managed Instance, requiere el permiso VIEW SERVER STATE.

En los objetivos de servicio Básico, S0 y S1 de SQL Database y para bases de datos en grupos elásticos, se requiere la cuenta de administrador del servidor, la cuenta de administrador Microsoft Entra o la pertenencia al ##MS_ServerStateReader##rol del servidor. En el resto de objetivos del servicio de SQL Database, se requiere el permiso VIEW DATABASE STATE en la base de datos o la pertenencia en el rol del servidor ##MS_ServerStateReader##.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VIEW SERVER PERFORMANCE STATE en el servidor.

Comentarios

sys.dm_tran_active_snapshot_database_transactions informa transacciones asignadas a un número de secuencia de transacción (XSN) para el visionado de filas. Un XSN se asigna cuando la transacción requiere versionado por primera fila, no necesariamente cuando inicia o accede físicamente al almacén de versiones.

En una base de datos con ALLOW_SNAPSHOT_ISOLATION o READ_COMMITTED_SNAPSHOT habilitada, ejemplos incluyen:

  • Una transacción que se ejecuta bajo aislamiento serializable recibe asignada una XSN cuando genera por primera vez versiones de fila, por ejemplo mediante una UPDATE operación o DELETE .

  • Una transacción que se ejecuta bajo aislamiento de instantáneas recibe un XSN cuando establece por primera vez una instantánea para el acceso a datos, por ejemplo, a través de una SELECT que lee una tabla de usuario. BEGIN TRANSACTION por sí sola no asigna un XSN.

Los XSN se asignan a partir de un contador creciente a nivel de instancia. El mismo contador se usa para instantáneas a nivel de sentencia, por lo que los XSN de transacciones no tienen por qué ser consecutivos.

Examples

El siguiente ejemplo ilustra cuatro transacciones concurrentes en una base de datos con ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT configuradas en ON:

  • XSN-57 ejecuta un UPDATE aislamiento subserializable y permanece sin comprometerse.
  • XSN-58 ejecuta otro UPDATE bajo aislamiento serializable y permanece sin comprometer.
  • XSN-59 ejecuta un SELECT aislamiento bajo instantánea y permanece abierto.
  • XSN-60 ejecuta otro SELECT bajo aislamiento de instantáneas y permanece abierto.

Ambas transacciones de instantáneas establecen sus instantáneas mientras XSN-57 y XSN-58 están activas. Sus declaraciones leen SELECT versiones anteriores de las filas modificadas por las actualizaciones no comprometidas.

Se ejecuta la siguiente consulta:

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;

El siguiente resultado es ilustrativo. Los identificadores reales, números de secuencia, estadísticas y tiempos transcurridos varían.

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

Los resultados muestran lo siguiente:

  • XSN-57 y XSN-58 utilizan aislamiento serializable, por lo que is_snapshot = 0. Las UPDATE sentencias ejecutadas dentro de estas transacciones generan versiones de fila porque las opciones de instantánea de la base de datos son ON. Esta generación de versiones hace que se asignen números de secuencia de transacción. Ninguna de las dos transacciones contiene una instantánea en este ejemplo, por lo que first_snapshot_sequence_num NULL lo es.

  • XSN-59 y XSN-60 tienen is_snapshot = 1. Su first_snapshot_sequence_num valor de 57 identifica la transacción más antigua registrada como activa cuando se establecieron sus instantáneas.

  • Para XSN-59 y XSN-60, las longitudes de recorrido de la cadena de versión máxima y media son ambas 1. Cada recorrido registrado visitaba una versión de una fila. La media se calcula sobre recorridos que visitan al menos una versión de la fila.

  • XSN-59 y XSN-60 leían versiones comprometidas anteriores de las filas modificadas por XSN-57 y XSN-58, que aún no estaban comprometidas cuando se establecieron ambas instantáneas.