我有一个包含 64m 行的表,在磁盘上占用了 4.3 GB 的数据。
每行大约有 30 个字节的整数列,加上一个NVARCHAR(255)用于文本的变量列。
我添加了一个带有 data-type 的 NULLABLE 列Datetimeoffset(0)。
然后我为每一行更新了这一列,并确保所有新的插入都在这一列中放置了一个值。
一旦没有 NULL 条目,我就运行这个命令来使我的新字段成为强制性的:
ALTER TABLE tblCheckResult
ALTER COLUMN [dtoDateTime] [datetimeoffset](0) NOT NULL
Run Code Online (Sandbox Code Playgroud)
结果是事务日志大小大幅增长——从 6GB 增加到超过 36GB,直到空间用完!
有没有人知道 SQL Server 2008 R2 到底在为这个简单的命令做些什么来导致如此巨大的增长?
null sql-server sql-server-2008-r2 alter-table transaction-log