Это все объясняется в этом сообщении в блоге .
Причина, по которой я не видел указателей контроля версий в моем исходном тесте, связана с определением таблицы.*
Существует оптимизация производительности, которая позволяет избежать добавления информации о версиях строк, но только если таблица не может сгенерировать ROW_OVERFLOW
или LOB
единиц распределения.Это означает, что определение таблицы не должно учитывать большие объекты или возможность перемещения столбцов переменной длины за пределы строки.Фактический размер хранимых данных не имеет значения - это потенциальный размер, который имеет значение.
Если я изменю определение таблицы на
CREATE TABLE T1
(
F1 INT IDENTITY(1,1) PRIMARY KEY,
F2 INT,
V1 VARCHAR(1000),
V2 VARCHAR(8000) NULL
)
, так что потенциально это может непоместиться в строку, тогда я вижу указатели версий в результатах DBCC
.например, как показано ниже.
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS VERSIONING_INFO
Record Size = 133
Memory Dump @0x63A4CC92
00000000: 70000c00 03000000 04000000 04004801 †p.............H.
00000010: 00770044 44444444 44444444 44444444 †.w.DDDDDDDDDDDDD
00000020: 44444444 44444444 44444444 44444444 †DDDDDDDDDDDDDDDD
00000030: 44444444 44444444 44444444 44444444 †DDDDDDDDDDDDDDDD
00000040: 44444444 44444444 44444444 44444444 †DDDDDDDDDDDDDDDD
00000050: 44444444 44444444 44444444 44444444 †DDDDDDDDDDDDDDDD
00000060: 44444444 44444444 44444444 44444444 †DDDDDDDDDDDDDDDD
00000070: 44444444 444444c8 7b000001 000500b8 †DDDDDDDÈ{......¸
00000080: 00000000 00††††††††††††††††††††††††††.....
Version Information =
Transaction Timestamp: 184
Version Pointer: (file 1 page 31688 currentSlotId 5)