sys.dm_tran_version_store (Transact-SQL)
Returns a virtual table that displays all version records in the version store.sys.dm_tran_version_store is inefficient to run because it queries the entire version store, and the version store can be very large.
Każdy rekord wersji są przechowywane jako dane binarne wraz z pewnych informacji śledzenia lub stan.Podobne do rekordów w tabelach bazy danych, rekordy magazynu wersja są przechowywane w stron bajt 8192.Jeśli rekord przekracza 8192 bajty, rekord zostanie podzielona na dwa różne rekordy.
Ponieważ wersji rekordu jest przechowywany jako plik binarny, nie ma problemów z różnych ustawień sortowania z różnych baz danych.Użycie sys.dm_tran_version_store , aby znaleźć poprzednie wersje wierszy w reprezentacja binarna one znajdować się w magazynie wersja.
sys.dm_tran_version_store
Zwracana tabela
Nazwa kolumna |
Typ danych |
Description |
---|---|---|
transaction_sequence_num |
bigint |
Numer transakcji, która generuje wersja rekordu w sekwencji. |
version_sequence_num |
bigint |
Numer wersja rekordów sekwencji.Wartość ta jest unikatowa w obrębie transakcji Generowanie wersja. |
database_id |
int |
Identyfikator wersji rekordów bazy danych. |
rowset_id |
bigint |
Identyfikator rekordu zestawu zestaw wierszy. |
Stan |
tinyint |
Wskazuje, czy wersji rekord został podzielony na dwa rekordy.Jeśli wartość jest równa 0, rekord jest przechowywany w jedną strona.Jeśli wartość wynosi 1, rekord jest podzielony na dwa rekordy, które są przechowywane na dwóch różnych stronach. |
min_length_in_bytes |
smallint |
Minimalna długość rekordu w bajtach. |
record_length_first_part_in_bytes |
smallint |
Długość w pierwszej części wersji rekordu w bajtach. |
record_image_first_part |
varbinary(8000) |
Binarny pierwszą część wersja rekordu. |
record_length_second_part_in_bytes |
smallint |
Długość drugiej części wersja rekordu w bajtach. |
record_image_second_part |
varbinary(8000) |
Binarny druga część rekordu wersja. |
Uprawnienia
Wymaga uprawnienia VIEW SERVER STATE na serwerze.
Aby wyświetlić record_image_first_part and record_image_second_part kolumn, wymaga uprawnienia CONTROL SERVER.W przeciwnym wypadku te kolumny zwróci wartość NULL.
Przykłady
W poniższym przykładzie użyto Scenariusz testów systemem cztery jednoczesnych transakcji, każdy identyfikowane przez numer sekwencji transakcji (XSN) w bazie danych, które zawiera opcje ALLOW_SNAPSHOT_ISOLATION i READ_COMMITTED_SNAPSHOT ustawiona na ON.Uruchomione są następujące operacje:
57 XSN jest operacją aktualizacji w obszarze izolacji możliwy do serializacji.
58 XSN jest taka sama, jak 57 XSN.
XSN-59 jest operacją select w izolacji migawka.
60 XSN jest taka sama, jak XSN-59).
Następująca kwerenda jest wykonywana.
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;
Here is the result set.
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
Dane wyjściowe pokazuje, że 57 XSN została utworzona trzy wersje wierszy z jednej tabela i 58 XSN zostało utworzone z jednej wersja wiersza z innej tabela.