0

我做了一个关于 DBCC IND 和 DBCC page 的测试。引擎:SQL Server 2008

脚本:

CREATE TABLE dbo.t2
(
ID int,
Col1 varchar(10),
Col2 varchar(20)
);


INSERT INTO dbo.t2 SELECT 1,REPLICATE('a',10),REPLICATE('b',10)


DECLARE @DBID int,@TableID int;
SELECT @DBID=DB_ID(),@TableID=OBJECT_ID('dbo.t2');
DBCC IND(@DBID,@TableID,-1)

--这显示:1 274 1 278 1307151702 0 1 72057594039107584 行内数据 1

DBCC TRACEON (3604)
--DBCC PAGE (@DBID, 1,22,3)
--then dump the page info
DBCC PAGE(@DBID, 1,274,1)

显示:

数据:

插槽 0,偏移量 0x60,长度 51,DumpStyle BYTE

记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP VARIABLE_COLUMNS VERSIONING_INFO 记录大小 = 51 内存转储 @0x000000000F7EA060

0000000000000000 : 700000000000000 . 0000000000000030: 00000 ††††††††††††††††††††††††††††††††††††††††††...

偏移表:

行 - 偏移量 0 (0x0) - 96 (0x60) 我试着解释一下:

字节一 0x70 01110000

位 0:SQL 服务器 2005/2008

位 1-3:主要数据

位 4:有 NULL

位 5:有 VAR

位 6:未使用

位 7:不是幽灵

第二个字节

0x00:未使用

第三字节

0x0008 : 偏移量 8

固定长度 int ,我得到值1

然后下一个字节

0300 : 3 列

00:不为空

0002 :2 列

var column endoffset 0x001B(我得到值 aaa....)

var column end offset 0x0025(我得到值 bbbb ...)

但是,我不知道最后一个字节的含义....

请帮助我,谢谢

4

3 回答 3

0

它是 14 字节的版本控制标记 [时间戳,指向 tempdb 的指针]。

于 2010-12-17T04:10:26.460 回答
0

来自大师保罗兰德尔

存储引擎内部:页面剖析。和程度。并记录

根据对最后一个链接的评论,它是记录的一部分。

于 2010-12-17T04:46:38.587 回答
0

每个数据库行在行尾最多可以使用 14 个字节来存储行版本信息。行版本信息包含提交版本的事务的事务序列号和指向版本化行的指针。这 14 个字节是在第一次修改行时添加的,或者在插入新行时,在以下任何条件下:

READ_COMMITTED_SNAPSHOT 或 ALLOW_SNAPSHOT_ISOLATION 选项为 ON。

该表有一个触发器。

正在使用多个活动结果集 (MARS)。

当前正在表上运行在线索引构建操作。

于 2010-12-17T05:45:25.540 回答