在阅读了 The Data Loading Performance Guide之后,我仍然不确定是否有必要将 TABLOCK 表提示添加到使用聚集索引定义的空临时表中,以便获得最少的日志记录。
显然,临时表是在 TempDB 中创建的,它以 SIMPLE 恢复模式运行,所以我认为它是最小日志记录的完美候选;但是,我找不到确认它的段落。
临时表是否是最小日志记录的候选者,如果是,是否值得按照永久表的建议添加 TABLOCK 提示?
在阅读了 The Data Loading Performance Guide之后,我仍然不确定是否有必要将 TABLOCK 表提示添加到使用聚集索引定义的空临时表中,以便获得最少的日志记录。
显然,临时表是在 TempDB 中创建的,它以 SIMPLE 恢复模式运行,所以我认为它是最小日志记录的完美候选;但是,我找不到确认它的段落。
临时表是否是最小日志记录的候选者,如果是,是否值得按照永久表的建议添加 TABLOCK 提示?
不可以。本地临时表 (
#temp
) 对于创建会话是私有的,因此不需要表锁定提示。全局临时表##temp
(dbo.temp
tempdb
请注意,即使未应用完整的最小日志记录优化,创建的表也会
tempdb
受益于其他优化,例如不需要记录REDO
信息。您可以测试以查看是否正在使用未记录的sys.fn_dblog
. 常规日志记录将包含行记录的记录,例如LOP_INSERT_ROWS
.请注意,需要添加
TABLOCK
到本地临时表才能INSERT...SELECT
在 SQL Server 2016 中使用查询并行执行,请参阅 Microsoft 知识库文章:在 SQL Server 2016 中运行 INSERT..SELECT 操作时性能不佳