sys.dm_tran_active_transactions (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Динамический вид управления возвращает sys.dm_tran_active_transactions информацию о транзакциях для экземпляра.

Имя столбца Тип данных Description
transaction_id bigint Идентификатор транзакции на уровне экземпляра, а не на уровне базы данных. Он уникален во всех базах данных только в пределах экземпляра, но не уникален во всех экземплярах сервера.
name nvarchar(32) Имя транзакции. Оно перезаписывается, если транзакция помечена, и помеченное имя заменяет имя транзакции.
transaction_begin_time datetime Время начала транзакции.
transaction_type int Тип транзакции.

1 = транзакция чтения-записи

2 = транзакция только чтения

3 = системная транзакция

4 = распределенная транзакция
transaction_uow uniqueidentifier Идентификатор единицы работы транзакции (UOW) для распределенных транзакций. Распределённый координатор транзакций Microsoft (MS DTC) использует идентификатор UOW для работы с распределённой транзакцией.
transaction_state int 0 = Транзакция еще не была полностью инициализирована.

1 = Транзакция инициализована, но не запущена.

2 = Транзакция активна.

3 = Транзакция закончилась. Используется для транзакций только для чтения.

4 = Фиксирующий процесс был инициализирован на распределенной транзакции. Только для распределённых транзакций. Распределенная транзакция все еще активна, но дальнейшая обработка не может иметь место.

5 = Транзакция находится в готовом состоянии и ожидает разрешения.

6 = транзакция зафиксирована.

7 = Производится откат транзакции.

8 = транзакция была откатена.
transaction_status int Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
transaction_status2 int Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
dtc_state int Область применения: База данных SQL Azure.

1 = АКТИВНЫЙ

2 = ГОТОВО

3 = ОБЯЗАТЕЛЬСТВО

4 = ОТМЕНЕНО

5 = ВОССТАНОВЛЕНО
dtc_status int Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
dtc_isolation_level int Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
filestream_transaction_id varbinary(128) Область применения: База данных SQL Azure.

Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
pdw_node_id int применимо к: Azure Synapse Analytics, система платформы аналитики (PDW)

Идентификатор узла, на который находится это распределение.

Permissions

Для SQL Server и Управляемого экземпляра SQL требуется разрешение VIEW SERVER STATE.

В Microsoft Fabric для запроса требуется членство в роли Contributor workspace или более привилегированной роли.sys.dm_tran_active_transactions

В базе данных SQL базовые, S0и S1 целей службы, а также для баз данных в эластичных пулах, требуется учетная запись администратора сервера сервера, учетная запись администратора Microsoft Entra или членство в роли сервера ##MS_ServerStateReader##. Для всех остальных целей службы базы данных SQL требуется разрешение VIEW DATABASE STATE на базу данных или членство в роли сервера ##MS_ServerStateReader##.

Разрешения для SQL Server 2022 и более поздних версий

Требуется VIEW разрешение на состояние производительности сервера на сервере.

Замечания

Чтобы назвать этот динамический вид управления из Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_tran_active_transactions : Этот синтаксис не поддерживается серверным SQL-пулом в Azure Synapse Analytics.

Examples

А. Используйте sys.dm_tran_active_transactions вместе с другими DMV, чтобы найти информацию об активных транзакциях

Следующий пример показывает любые активные транзакции в системе. Запрос содержит подробную информацию о транзакции, пользовательской сессии, приложении, которое было отправлено, и запросе, который её инициировал, а также о многих других.

SELECT
  GETDATE() as now,
  DATEDIFF(SECOND, transaction_begin_time, GETDATE()) as tran_elapsed_time_seconds,
  st.session_id,
  txt.text, 
  *
FROM
  sys.dm_tran_active_transactions at
  INNER JOIN sys.dm_tran_session_transactions st ON st.transaction_id = at.transaction_id
  LEFT OUTER JOIN sys.dm_exec_sessions sess ON st.session_id = sess.session_id
  LEFT OUTER JOIN sys.dm_exec_connections conn ON conn.session_id = sess.session_id
    OUTER APPLY sys.dm_exec_sql_text(conn.most_recent_sql_handle)  AS txt
ORDER BY
  tran_elapsed_time_seconds DESC;