使用比预期更多的日志空间的在线聚集索引重建

Jam*_*son 5 sql-server clustered-index maintenance sql-server-2012 transaction-log

我有一张桌子 TableA

ID PK BIGINT
TrxID BIGINT
CardBalance INT
AccountBalance INT
Run Code Online (Sandbox Code Playgroud)

SP_SPACEUSED 'TableA' 输出:

name    rows       reserved     data         index_size   unused
TableA  904054184  55547120 KB  34661408 KB  19963544 KB  922168 KB
Run Code Online (Sandbox Code Playgroud)

所以数据大小约为33 GB。TrxID 上有一个聚集索引。有一个非聚集索引,大约有 19GB。

我的事务日志文件大小约为 250 GB。DBCC SQLPERF('logspace')显示 < 1% 的使用率。

当我运行时:

ALTER INDEX CIX_TableA_TrxID ON dbo.TableA REBUILD WITH (ONLINE = ON)
Run Code Online (Sandbox Code Playgroud)

事务日志在大约 20 分钟后达到 100%,然后继续增长。

是否有可靠的方法来计算此操作需要多少日志空间?

此外,这似乎在日志文件中使用了很多空间,这听起来对吗?

  • 此数据库位于具有 1 个其他异步副本的可用性组中(因此使用完整恢复模型)。
  • 这是一个测试数据库,因此没有任何其他事务与重新索引同时运行。

Jam*_*son 1

在联系SQLSkills的 Paul Randal 后,他告诉我事务日志使用率高的原因是在ONLINE索引重新/构建中,每一行都有它自己的日志记录以及日志记录的所有开销。一个OFFLINE记录完整的 8kb 页面图像,而不是逐行记录。

\n\n

Pawe\xc5\x82 Tajs 提供的相关链接:

\n\n

SQL 问答:日志知识(同样由 Paul Randal 撰写)

\n