Поделиться через


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, Analytics Platform System (PDW)

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

Разрешения

На SQL Server и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE.

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

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

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

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Замечания

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

Примеры

А. Используйте 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;