sys.dm_tran_active_snapshot_database_transactions (Transact-SQL)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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)