sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 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 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;
Este es el conjunto de resultados.
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 yfirst_snapshot_sequence_num
son0
.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 es1
y que ha recorrido un promedio de1
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)