geo*_*tnz 6 index sql-server transaction-log sql-server-2014
我有一个大约 10 亿行的表。然后我创建一个索引如下:
CREATE NONCLUSTERED INDEX [IX_Index1]
ON [dbo].[MyTable]( [CustomerID] ASC ) -- CustomerID is uniqueidentifier
WITH (DATA_COMPRESSION=PAGE);
Run Code Online (Sandbox Code Playgroud)
这会产生 9.15GB 的索引(压缩),但是在创建索引时事务日志从空变为 158GB(没有其他数据库活动)。为什么使用的日志空间量远高于索引的结果大小?
数据库是可用性组中处于完全恢复模式的 SQLServer 2014 Enterprise。
更新
我删除并使用选项重新创建了索引SORT_IN_TEMPDB = ON。DB tlog 的事务日志写入结果为 10.4GB,tempdb tlog 为 1.27GB。
请参阅此处的MS 文档。还在SQLFool 上创建 60GB 索引。
我相信正在发生的事情是,当使用 构建索引时SORT_IN_TEMDB=OFF,处理的整个索引构建都会通过数据库的事务日志记录(数据库设置为完全恢复)。(此外,由于正在索引的 GUID 列的分散性,我预计会有大量页面拆分)
当使用 构建索引时SORT_IN_TEMPDB=ON,大多数事务日志活动将针对tempdb处于SIMPLE恢复模式的情况。
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |