次の方法で共有


sys.dm_tran_version_store (Transact-SQL)

バージョン ストア内のすべてのバージョン レコードを表示する仮想テーブルを返します。sys.dm_tran_version_store では、バージョン ストア全体がクエリされ、バージョン ストアが非常に大きくなる可能性があるため、効率的ではありません。

各バージョン レコードは、追跡情報または状態情報と共にバイナリ データとして格納されます。データベース テーブル内のレコードと同様、バージョン ストア レコードは 8,192 バイトのページに格納されます。レコードが 8,192 バイトを超える場合は、2 つのレコードに分割されます。

バージョン レコードはバイナリとして格納されるので、複数のデータベースの照合順序が異なっていても問題にはなりません。sys.dm_tran_version_store を使用すると、バージョン ストアに存在している、バイナリ表示の前のバージョンの行を検索できます。

構文

sys.dm_tran_version_store

返されるテーブル

列名

データ型

説明

transaction_sequence_num

bigint

レコード バージョンを生成するトランザクションのシーケンス番号。

version_sequence_num

bigint

バージョン レコードのシーケンス番号。この値はバージョンを生成するトランザクション内で一意です。

database_id

int

バージョン レコードのデータベース ID。

rowset_id

bigint

レコードの行セット ID。

status

tinyint

バージョン レコードが 2 つのレコードに分割されているかどうかを示します。値が 0 の場合、レコードは 1 ページに格納されています。値が 1 の場合、レコードは 2 つのレコードに分割され、2 つの異なるページに格納されています。

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

バージョン レコードの 2 番目の部分の長さ (バイト単位)。

record_image_second_part

varbinary(8000)

バージョン レコードの 2 番目の部分のバイナリ イメージ。

権限

サーバーに対する VIEW SERVER STATE 権限が必要です。

record_image_first_part 列と record_image_second_part 列を表示するには、CONTROL SERVER 権限が必要です。権限がない場合、これらの列には NULL が返されます。

次の例では、4 つの同時実行トランザクションが存在するテスト シナリオを使用します。これらのトランザクションはそれぞれトランザクション シーケンス番号 (XSN) で識別され、ALLOW_SNAPSHOT_ISOLATION オプションと READ_COMMITTED_SNAPSHOT オプションが ON に設定されているデータベース内で実行されます。実行されるトランザクションは次のとおりです。

  • XSN-57。SERIALIZABLE 分離での更新操作です。

  • 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 で 1 つのテーブルから 3 つの行バージョンが作成され、XSN-58 で他のテーブルから 1 つの行バージョンが作成されたことを示しています。