Compartir a través de


sys.dm_tran_current_transaction (Transact-SQL)

Devuelve una sola fila que muestra información del estado de la transacción en la sesión actual.

Sintaxis

sys.dm_tran_current_transaction

Tabla devuelta

Nombre de columna

Tipo de datos

Descripción

transaction_id

bigint

Id. de transacción de la instantánea actual.

transaction_sequence_num

bigint

Número de secuencia de la transacción que genera la versión de registro.

transaction_is_snapshot

bit

Estado de aislamiento de instantáneas. Este valor es 1 si la transacción se ha iniciado con aislamiento de instantáneas. En caso contrario, el valor es 0.

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.

last_transaction_sequence_num

bigint

Número de secuencia global. Este valor representa el último número de secuencia de transacción generado por el sistema.

first_useful_sequence_num

bigint

Número de secuencia global. Este valor representa el número de secuencia de la transacción más antiguo con versiones de fila que deben conservarse en el almacén de versiones. Las versiones de fila creadas por transacciones anteriores se pueden quitar.

Permisos

Requiere el permiso VIEW SERVER STATE en el servidor.

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.

La siguiente consulta se ejecuta en el ámbito de cada transacción.

SELECT 
    transaction_id
    transaction_sequence_num
    transaction_is_snapshot
    first_snapshot_sequence_num
    last_transaction_sequence_num
    first_useful_sequence_num
  FROM sys.dm_tran_current_transaction;

Éste es el resultado de XSN-59.

transaction_id       transaction_sequence_num transaction_is_snapshot
-------------------- ------------------------ -----------------------
9387                 59                       1                       

first_snapshot_sequence_num last_transaction_sequence_num
--------------------------- -----------------------------
57                               61                      

first_useful_sequence_num
-------------------------
57

En la salida se muestra que XSN-59 es una transacción de instantáneas que utiliza XSN-57 como la primera transacción activa cuando se inició XSN-59. Esto significa que XSN-59 lee datos confirmados por transacciones con un número de secuencia de la transacción inferior a XSN-57.

Éste es el resultado de XSN-57.

transaction_id       transaction_sequence_num transaction_is_snapshot
-------------------- ------------------------ -----------------------
9295                 57                       0

first_snapshot_sequence_num last_transaction_sequence_num
--------------------------- -----------------------------
NULL                        61

first_useful_sequence_num
-------------------------
57

Puesto que XSN-57 no es una transacción de instantáneas, first_snapshot_sequence_num es NULL.