即使在阅读了《数据加载性能指南》之后,我仍然不确定是否有必要将TABLOCK表提示添加到一个空的临时表中,该临时表由一个聚集索引定义,以便获得最少的日志记录。
显然,临时表是在TempDB中创建的,该表以SIMPLE恢复模式运行,因此我本以为它是最小化日志记录的理想选择,但是我找不到找到该表的方法。
临时表是否可以作为最少日志记录的候选表?如果这样,是否值得为永久表推荐添加TABLOCK提示?
即使在阅读了《数据加载性能指南》之后,我仍然不确定是否有必要将TABLOCK表提示添加到一个空的临时表中,该临时表由一个聚集索引定义,以便获得最少的日志记录。
显然,临时表是在TempDB中创建的,该表以SIMPLE恢复模式运行,因此我本以为它是最小化日志记录的理想选择,但是我找不到找到该表的方法。
临时表是否可以作为最少日志记录的候选表?如果这样,是否值得为永久表推荐添加TABLOCK提示?
Answers:
我不确定是否有必要将
TABLOCK
表提示添加到一个空的临时表中,该表由聚簇索引定义,以便获得最少的日志记录。
否。本地临时表(#temp
)是创建会话专用的,因此不需要表锁定提示。在中创建的全局临时表(##temp
)或常规表(dbo.temp
)将需要表锁定提示tempdb
,因为可以从多个会话中访问它们。
请注意,即使没有应用完全最小的日志记录优化,创建的表也tempdb
可以从其他优化中受益,例如不需要记录REDO
信息。您可以测试使用未记录的来查看是否记录了行或页面sys.fn_dblog
。常规日志记录将包含行记录的记录,例如LOP_INSERT_ROWS
。
请注意,需要添加TABLOCK
到本地临时表才能INSERT...SELECT
在SQL Server 2016中并行执行查询,请参阅Microsoft知识库文章: