gpt4 book ai didi

sql-server - 触发器和行版本控制信息

转载 作者:行者123 更新时间:2023-12-02 14:50:02 24 4
gpt4 key购买 nike

什么情况下表触发器会导致在行尾添加 14 个字节以进行行版本控制?

“数据行中使用的空间”部分 on this page明确指出“每个数据库行可以在行末尾使用最多 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 有一篇方便的文章,名为:"Inside the Storage Engine: When do versioning tags get added?" 。线索就在标题中:-)

关于sql-server - 触发器和行版本控制信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5106372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com