Sql-Server

將數據載入到臨時表中時獲得最少的日誌記錄

  • April 1, 2021

在閱讀了 The Data Loading Performance Guide之後,我仍然不確定是否有必要將 TABLOCK 表提示添加到使用聚集索引定義的空臨時表中,以便獲得最少的日誌記錄。

顯然,臨時表是在 TempDB 中創建的,它以 SIMPLE 恢復模式執行,所以我認為它是最小日誌記錄的完美候選;但是,我找不到確認它的段落。

臨時表是否是最小日誌記錄的候選者,如果是,是否值得按照永久表的建議添加 TABLOCK 提示?

我不確定是否有必要將TABLOCK表提示添加到使用聚集索引定義的空臨時表中以獲得最少的日誌記錄。

不可以。本地臨時表 ( #temp) 對於創建會話是私有的,因此不需要表鎖定提示。全域臨時表##tempdbo.temp``tempdb

請注意,即使未應用完整的最小日誌記錄優化,創建的表也會tempdb受益於其他優化,例如不需要記錄REDO資訊。您可以測試以查看是否正在使用未記錄的sys.fn_dblog. 正常日誌記錄將包含行記錄的記錄,例如LOP_INSERT_ROWS.


請注意,需要添加TABLOCK到本地臨時表才能INSERT...SELECT在 SQL Server 2016 中使用查詢並行執行,請參閱 Microsoft 知識庫文章:

在 SQL Server 2016 中執行 INSERT..SELECT 操作時性能不佳

引用自:https://dba.stackexchange.com/questions/85892