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


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)