sys.dm_tran_version_store (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает виртуальную таблицу, в которой отображаются все записи о версиях в хранилище версий. sys.dm_tran_version_store неэффективны для выполнения, так как он запрашивает все хранилище версий, а хранилище версий может быть очень большим.
Каждая запись версии хранится в виде двоичных данных вместе с некоторыми сведениями о состоянии и отслеживании. Как и в таблицах базы данных, записи в хранилище версий хранятся в страницах размером 8192 байта. Если размер записи превышает 8192 байта, она разбивается на две различные записи.
Так как запись версии хранится в двоичном виде, не возникает проблем с разными параметрами сортировки из разных баз данных. Используйте sys.dm_tran_version_store , чтобы найти предыдущие версии строк в двоичном представлении, как они существуют в хранилище версий.
Синтаксис
sys.dm_tran_version_store
Возвращаемая таблица
Имя столбца | Тип данных | Description |
---|---|---|
transaction_sequence_num | bigint | Порядковый номер транзакции, формирующий номер версии записи. |
version_sequence_num | bigint | Порядковый номер версии записи. Значение является уникальным в рамках сформировавшей эту версию транзакции. |
database_id | int | Идентификатор базы данных версии записи. В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере. |
rowset_id | bigint | Идентификатор набора строк записи. |
состояние | tinyint | Указывает, была ли запись версии разбита на две записи. Если значение равно 0, запись хранится на одной странице. Если оно равно 1, запись разбивается на две записи, которые хранятся на двух различных страницах. |
min_length_in_bytes | smallint | Минимальная длина записи в байтах. |
record_length_first_part_in_bytes | smallint | Длина первой части записи версии в байтах. |
record_image_first_part | varbinary(8000) | Двоичный образ первой части записи версии. |
record_length_second_part_in_bytes | smallint | Длина второй части записи версии в байтах. |
record_image_second_part | varbinary(8000) | Двоичный образ второй части записи версии. |
Разрешения
На 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 на сервере.
Примеры
Следующий пример использует тестовый сценарий, содержащий четыре параллельные транзакции, идентифицированные порядковыми номерами (XSN), который выполняется в базе данных с параметрами ALLOW_SNAPSHOT_ISOLATION и READ_COMMITTED_SNAPSHOT, установленными в значение ON. Следующие транзакции запущены:
XSN-57 является операцией обновления с сериализуемой изоляцией.
XSN-58 аналогична XSN-57.
XSN-59 является операцией выбора с изоляцией моментального снимка.
XSN-60 аналогична XSN-59.
Выполнен следующий запрос.
SELECT
transaction_sequence_num,
version_sequence_num,
database_id rowset_id,
status,
min_length_in_bytes,
record_length_first_part_in_bytes,
record_image_first_part,
record_length_second_part_in_bytes,
record_image_second_part
FROM sys.dm_tran_version_store;
Вот результирующий набор.
transaction_sequence_num version_sequence_num database_id
------------------------ -------------------- -----------
57 1 9
57 2 9
57 3 9
58 1 9
rowset_id status min_length_in_bytes
-------------------- ------ -------------------
72057594038321152 0 12
72057594038321152 0 12
72057594038321152 0 12
72057594038386688 0 16
record_length_first_part_in_bytes
---------------------------------
29
29
29
33
record_image_first_part
--------------------------------------------------------------------
0x50000C0073000000010000000200FCB000000001000000270000000000
0x50000C0073000000020000000200FCB000000001000100270000000000
0x50000C0073000000030000000200FCB000000001000200270000000000
0x500010000100000002000000030000000300F800000000000000002E0000000000
record_length_second_part_in_bytes record_image_second_part
---------------------------------- ------------------------
0 NULL
0 NULL
0 NULL
0 NULL
Выход показывает, что транзакция XSN-57 создала три версии строк из одной таблицы, а XSN-58 — одну версию строки из другой таблицы.
См. также
Динамические административные представления и функции (Transact-SQL)
Динамические административные представления и функции, связанные с транзакциями (Transact-SQL)