sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

В экземпляре SQL Server это динамическое представление управления возвращает виртуальную таблицу для всех активных транзакций, которые создают или потенциально получают доступ к версиям строк. Транзакции включаются для одного или нескольких из следующих условий.

  • Если одному или обоим параметрам базы данных ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT присвоены значения ON.

    • Для каждой транзакции имеется одна строка, запускающаяся на уровне изоляции моментальных снимков либо на уровне READ COMMITTED с использованием управления версиями строк.

    • Для каждой транзакции имеется одна строка, вызывающая создание версии строки в текущей базе данных. Например, транзакция формирует версию строки путем обновления или удаления строки из текущей базы данных.

  • При срабатывании триггера имеется одна строка для транзакции, в которой выполняется триггер.

  • При запуске процедуры индексирования в сети имеется одна строка для транзакции, которая создает индекс.

  • При включенном режиме MARS имеется одна строка для каждой транзакции, которая получает доступ к версиям строк.

Это динамическое административное представление не включает в себя системные транзакции.

Примечание.

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

Синтаксис

  
sys.dm_tran_active_snapshot_database_transactions  

Возвращаемая таблица

Имя столбца Тип данных Description
transaction_id bigint Уникальный идентификатор, присвоенный транзакции. Идентификатор транзакции используется главным образом для определения транзакции при операциях блокировки.
transaction_sequence_num bigint Порядковый номер транзакции. Порядковый номер транзакции является уникальным и присваивается транзакции в момент ее запуска. Транзакции, которые не создают записи версий и не используют сканирование моментальных снимков, не получат порядковый номер.
commit_sequence_num bigint Порядковый номер, который указывает, когда транзакция заканчивается (фиксируется или останавливается). Для активных транзакций значение равно NULL.
is_snapshot int 0 = транзакция, отличная от изоляции моментального снимка.

1 = транзакция изоляции моментального снимка.
session_id int Идентификатор сеанса, в рамках которого была инициирована транзакция.
first_snapshot_sequence_num bigint Наименьший порядковый номер транзакции, которая была активна при получении моментального снимка. При выполнении транзакции моментального снимка она формирует моментальный снимок активных в этот момент транзакций. Для транзакций, не связанных с моментальными снимками, в этом столбце отображается 0.
max_version_chain_traversed int Максимальная длина цепочки версий, пройденной в поисках транзакционно согласованной версии.
average_version_chain_traversed real Среднее число версий строк по всем пройденным цепочкам версий.
elapsed_time_seconds bigint Время, истекшее с момента, когда транзакция получила свой порядковый номер.
pdw_node_id int Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)

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

Разрешения

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

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

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

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

Замечания

sys.dm_tran_active_snapshot_database_transactions сообщает о транзакциях, назначенных номеру последовательности транзакций (XSN). Порядковый номер XSN назначается при первом доступе транзакции к хранилищу версий. В следующих примерах показано, как в базе данных, для которой включена изоляция моментальных снимков или READ COMMITTED с использованием управления версиями строк, транзакции назначается номер XSN.

  • Если транзакция выполняется на упорядочиваемом уровне изоляции, номер XSN назначается при первом выполнении транзакцией какой-либо инструкции, например операции UPDATE, в ходе которой создается версия строки.

  • Если транзакция выполняется на уровне изоляции моментальных снимков, номер XSN назначается при выполнении какой-либо инструкции языка обработки данных (DML), включая операцию SELECT.

Порядковые номера транзакций последовательно увеличиваются для каждой транзакции, запущенной в экземпляре ядро СУБД.

Примеры

Следующий пример использует тестовый сценарий, содержащий четыре параллельные транзакции, идентифицированные порядковыми номерами (XSN), который выполняется в базе данных с параметрами ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT, установленными в значение ON. Следующие транзакции запущены:

  • XSN-57 является операцией обновления с сериализуемой изоляцией.

  • XSN-58 аналогична XSN-57.

  • XSN-59 — операция выборки с уровнем изоляции моментальных снимков.

  • XSN-60 — то же, что и XSN-59.

Выполнен следующий запрос.

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;  

Результирующий набор:

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  

Следующие сведения оценивают результаты из sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: так как эта транзакция не выполняется при изоляции моментальных снимков, is_snapshot значение и first_snapshot_sequence_num являются 0. Аргумент transaction_sequence_num показывает, что данной транзакции был присвоен порядковый номер, поскольку параметр READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION (или оба) имеют значение ON.

  • XSN-58: эта транзакция не выполняется при изоляции моментальных снимков, а те же сведения для XSN-57 применяются.

  • XSN-59: это первая активная транзакция, которая выполняется при изоляции моментальных снимков. Транзакция считывает данные, зафиксированные транзакцией XSN-57, на что указывает параметр first_snapshot_sequence_num. Вывод этой транзакции также указывает на то, что максимальная цепочка версий, пройденная для строки, равна 1 и что для каждой строки, к которой был получен доступ, пройдена в среднем 1 версия. Это означает, что транзакции XSN-57, XSN-58 и XSN-60 не изменяли строки и были зафиксированы.

  • XSN-60: это вторая транзакция, выполняемая при изоляции моментальных снимков. Вывод содержит такие же сведения, что и для транзакции XSN-59.

См. также

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Динамические административные представления и функции (Transact-SQL)
Динамические административные представления и функции, связанные с транзакциями (Transact-SQL)