The Data Loading Performance Guide を読んだ後でも、最小限のログを取得するためにクラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはまだわかりません。
明らかに、一時テーブルはSIMPLEリカバリモードで動作するTempDBで作成されているため、最小限のロギングの完全な候補であると思いましたが、確認する箇所が見つかりません。
一時テーブルは最小限のロギングの候補です。そうであれば、永続テーブルに推奨されるTABLOCKヒントを追加する価値はありますか?
最小限のログを取得するために、クラスター化インデックスで定義された空の一時テーブルに
TABLOCK
テーブルヒントを追加する必要があるかどうかはわかりません。
いいえ。ローカル一時テーブル(#temp
)は作成中のセッションに対してprivateであるため、テーブルロックヒントは必要ありません。グローバル一時テーブル(##temp
)またはtempdb
に作成された通常のテーブル(dbo.temp
)には、複数のセッションからアクセスできるため、テーブルロックヒントが必要です。
最小限のロギング最適化が完全に適用されていない場合でも、tempdb
で作成されたテーブルは、REDO
情報をログに記録する必要がないなど、他の最適化の恩恵を受けます。ドキュメント化されていないsys.fn_dblog
を使用して、行またはページがログに記録されているかどうかをテストできます。通常のロギングでは、LOP_INSERT_ROWS
などの行にログが記録されます。
SQL Server 2016でINSERT...SELECT
クエリを使用して並列実行するには、TABLOCK
をローカルの一時テーブルに追加する必要があることに注意してください。マイクロソフトサポート技術情報の記事を参照してください。