在什么情况下表触发器会导致在行末尾添加 14 个字节以进行行版本控制?
“数据行中使用的空间”部分在本页 http://msdn.microsoft.com/en-us/library/ms175492.aspx明确指出“每个数据库行可以在行末尾使用最多 14 个字节用于行版本控制信息......这 14 个字节是在第一次修改行时添加的,或者在插入新行时添加的,在任何这些下状况 ...该表有一个触发器."
这在我的测试中没有发生(下面的脚本)。查看数据页面时,我没有看到快照隔离下出现的任何版本控制信息。我是否可以安全地假设数据页上的行永远不会仅仅因为表上有一个触发器而因这 14 个字节而变得臃肿?如果不是的话,什么时候会发生这种情况?
CREATE DATABASE D2
GO
ALTER DATABASE D2 SET ALLOW_SNAPSHOT_ISOLATION OFF
USE D2;
GO
CREATE TABLE T1
(
F1 INT IDENTITY(1,1) PRIMARY KEY,
F2 INT,
V1 VARCHAR(100)
)
INSERT INTO T1
SELECT TOP 80 ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS F2,
REPLICATE(CHAR((ROW_NUMBER() OVER (ORDER BY (SELECT 0) -1) % 26) + ASCII('A')),100) AS V1
FROM sys.all_columns
GO
CREATE TRIGGER TR
ON T1
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM inserted
END
GO
UPDATE T1 SET F2=F2+1
GO
DECLARE @DBCCPAGE nvarchar(100)
SELECT TOP 1 @DBCCPAGE = 'DBCC PAGE(''D2'',' + CAST(file_id AS VARCHAR) + ',' + CAST(page_id AS VARCHAR) + ',3)'
FROM T1
CROSS APPLY sys.fn_PhysLocCracker(%%physloc%%)
DBCC TRACEON(3604)
EXEC (@DBCCPAGE)
GO
Paul Randal 有一篇方便的文章,名为:“存储引擎内部:何时添加版本控制标签?” http://www.sqlskills.com/blogs/paul/post/Inside-the-Storage-Engine-When-do-versioning-tags-get-added.aspx。线索就在标题中:-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)