我有一张桌子TableA
ID PK BIGINT
TrxID BIGINT
CardBalance INT
AccountBalance INT
SP_SPACEUSED 'TableA'
输出:
name rows reserved data index_size unused
TableA 904054184 55547120 KB 34661408 KB 19963544 KB 922168 KB
因此数据大小约为 33 GB。TrxID 上有一个聚簇索引。有一个非聚集索引,大约有 19GB。
我的事务日志文件大小约为 250 GB。DBCC SQLPERF('logspace')
显示 < 1% 的使用率。
当我跑步时:
ALTER INDEX CIX_TableA_TrxID ON dbo.TableA REBUILD WITH (ONLINE = ON)
事务日志在大约 20 分钟后达到 100%,然后继续增长。
有没有可靠的方法来计算此操作需要多少日志空间?
此外,这似乎在日志文件中使用了很多空间,这听起来对吗?
- 此数据库与 1 个其他异步副本位于可用性组(因此使用完整恢复模型)。
- 这是一个测试数据库,因此没有任何其他事务与重建索引同时运行。
在联系了SQLSkills的 Paul Randal 之后,他告诉我事务日志使用率高的原因是在
ONLINE
索引重建/构建中,每一行都有自己的日志记录,其中包含日志记录的所有开销。重建记录完整的OFFLINE
8kb 页面图像,而不是逐行记录。Paweł Tajs 提供的相关链接:
SQL 问答:日志的知识(也由 Paul Randal 撰写)