将数据加载到临时表中时获得最少的日志记录


10

即使在阅读了《数据加载性能指南》之后,我仍然不确定是否有必要将TABLOCK表提示添加到一个空的临时表中,该临时表由一个聚集索引定义,以便获得最少的日志记录。

显然,临时表是在TempDB中创建的,该表以SIMPLE恢复模式运行,因此我本以为它是最小化日志记录的理想选择,但是我找不到找到该表的方法。

临时表是否可以作为最少日志记录的候选表?如果这样,是否值得为永久表推荐添加TABLOCK提示?

Answers:


18

我不确定是否有必要将TABLOCK表提示添加到一个空的临时表中,该表由聚簇索引定义,以便获得最少的日志记录。

否。本地临时表(#temp)是创建会话专用的,因此不需要表锁定提示。在中创建的全局临时表(##temp)或常规表(dbo.temp)将需要表锁定提示tempdb,因为可以从多个会话中访问它们。

请注意,即使没有应用完全最小的日志记录优化,创建的表也tempdb可以从其他优化中受益,例如不需要记录REDO信息。您可以测试使用未记录的来查看是否记录了行或页面sys.fn_dblog。常规日志记录将包含行记录的记录,例如LOP_INSERT_ROWS


请注意,需要添加TABLOCK到本地临时表才能INSERT...SELECT在SQL Server 2016中并行执行查询,请参阅Microsoft知识库文章:

当您运行INSERT时性能不佳。SQL Server 2016中的SELECT操作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.