sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

En una instancia de SQL Server, esta vista de administración dinámica devuelve una tabla virtual para todas las transacciones activas que generan o pueden tener acceso a versiones de fila. Las transacciones se incluyen en función de una o varias de las siguientes condiciones:

  • Si una de las opciones de base de datos ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT (o ambas) está establecida en ON:

    • Existe una fila para cada transacción que se ejecute en el nivel de aislamiento de instantáneas, o bien en el nivel de aislamiento de lectura confirmada que utiliza versiones de fila.

    • Existe una fila para cada transacción que provoca la creación de una versión de fila en la base de datos actual. Por ejemplo, la transacción genera una versión de fila cuando actualiza o elimina una fila de la base de datos actual.

  • Cuando se inicia un desencadenador, existe una fila para la transacción en la que se ejecuta el desencadenador.

  • Cuando se ejecuta un procedimiento de indización en línea, existe una fila para la transacción que crea el índice.

  • Cuando se habilita la sesión MARS (Conjuntos de resultados activos múltiples), existe una fila para cada transacción que tiene acceso a las versiones de fila.

Esta vista de administración dinámica no incluye transacciones del sistema.

Nota:

Para llamarlo desde Azure Synapse Analytics o Analytics Platform System (PDW), use 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.

Sintaxis

  
sys.dm_tran_active_snapshot_database_transactions  

Tabla devuelta

Nombre de la columna Tipo de datos Descripción
transaction_id bigint Número de identificación único asignado para 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 de la transacción. Se trata de un número de secuencia único que se asigna a una transacción cuando se inicia. Las transacciones que no generan registros de versiones y no utilizan recorridos de instantáneas no reciben un número de secuencia de la transacción.
commit_sequence_num bigint Número de secuencia que indica cuándo finaliza (se confirma o se detiene) la transacción. Para las transacciones activas, el valor es NULL.
is_snapshot int 0 = No es una transacción de aislamiento de instantánea.

1 = Es una transacción de aislamiento de instantánea.
session_id int Id. de la sesión que ha iniciado la transacción.
first_snapshot_sequence_num bigint Número más bajo de secuencia de la transacción de las transacciones que estaban activas cuando se obtuvo la instantánea. Cuando se ejecuta, una transacción de instantánea realiza una instantánea de todas las transacciones activas en ese momento. En las transacciones que no son de instantánea, en esta columna se muestra 0.
max_version_chain_traversed int Longitud máxima de la cadena de versiones que se recorre para buscar la versión coherente desde el punto de vista de las transacciones.
average_version_chain_traversed real Promedio de versiones de fila en las cadenas de versiones que se recorren.
elapsed_time_seconds bigint Tiempo transcurrido desde que la transacción obtuvo su número de secuencia de la transacción.
pdw_node_id int Se aplica a: Azure Synapse Analytics, Sistema de la plataforma de análisis (PDW)

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

Permisos

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

En los objetivos de servicio de SQL Database Basic, S0 y S1, y para las bases de datos de grupos elásticos, se requiere la cuenta de administrador del servidor, la cuenta de administrador de Microsoft Entra o la pertenencia al rol de ##MS_ServerStateReader##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 VER ESTADO DE RENDIMIENTO DEL SERVIDOR en el servidor.

Comentarios

sys.dm_tran_active_snapshot_database_transactions notifica transacciones asignadas a un número de secuencia de transacciones (XSN). Este XSN se asigna cuando la transacción tiene acceso por primera vez al almacén de versiones. En una base de datos habilitada para el aislamiento de instantáneas o el aislamiento de lectura confirmada que utiliza las versiones de fila, los ejemplos muestran cuándo se asigna un valor XSN a una transacción:

  • Si una transacción se ejecuta con el nivel de aislamiento serializable, se asigna un XSN cuando la transacción ejecuta por primera vez una instrucción, como una operación UPDATE, que provoca la creación de una versión de fila.

  • Si una transacción se ejecuta con el aislamiento de instantáneas, se asigna un XSN cuando se ejecuta cualquier instrucción de lenguaje de manipulación de datos (DML), incluida una operación SELECT.

Los números de secuencia de transacciones se incrementan en serie para cada transacción que se inicia en una instancia del Motor de base de datos.

Ejemplos

En el ejemplo siguiente se utiliza un escenario de prueba con cuatro transacciones simultáneas, identificadas con un número de secuencia de transacción (XSN), que se ejecutan en una base de datos con las opciones ALLOW_SNAPSHOT_ISOLATION y READ_COMMITTED_SNAPSHOT establecidas en ON. Se están ejecutando las siguientes transacciones:

  • XSN-57 es una operación de actualización con aislamiento serializable.

  • XSN-58 es igual que XSN-57.

  • XSN-59 es una operación de selección con aislamiento de instantáneas.

  • XSN-60 es igual que XSN-59.

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;  

El conjunto de resultados es el siguiente:

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  

La siguiente información evalúa los resultados de sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: dado que esta transacción no se ejecuta bajo aislamiento de instantáneas, el is_snapshot valor y first_snapshot_sequence_num son 0. transaction_sequence_num muestra que se ha asignado un número de secuencia de la transacción a esta transacción, ya que una o ambas de las opciones de base de datos ALLOW_SNAPSHOT_ISOLATION o READ_COMMITTED_SNAPSHOT están establecidas en ON.

  • XSN-58: esta transacción no se ejecuta con aislamiento de instantáneas y se aplica la misma información que en XSN-57.

  • XSN-59: ésta es la primera transacción activa que se ejecuta con aislamiento de instantáneas. Esta transacción lee datos confirmados antes de XSN-57, como se indica mediante first_snapshot_sequence_num. La salida de esta transacción también muestra que la cadena de versiones máxima que se recorre para una fila es 1 y que ha recorrido un promedio de 1 versión para cada fila a la que se tiene acceso. Esto significa que las transacciones XSN-57, XSN-58 y XSN-60 no han modificado filas ni realizado confirmaciones.

  • XSN-60: ésta es la segunda transacción que se ejecuta con aislamiento de instantáneas. La salida muestra la misma información que XSN-59.

Consulte también

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Funciones y vistas de administración dinámica (Transact-SQL)
Funciones y vistas de administración dinámica relacionadas con transacciones (Transact-SQL)