web-dev-qa-db-ja.com

一時テーブルにデータをロードするときに最小限のログを取得します

The Data Loading Performance Guide を読んだ後でも、最小限のログを取得するためにクラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはまだわかりません。

明らかに、一時テーブルはSIMPLEリカバリモードで動作するTempDBで作成されているため、最小限のロギングの完全な候補であると思いましたが、確認する箇所が見つかりません。

一時テーブルは最小限のロギングの候補です。そうであれば、永続テーブルに推奨されるTABLOCKヒントを追加する価値はありますか?

10
Pixelated

最小限のログを取得するために、クラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはわかりません。

いいえ。ローカル一時テーブル(#temp)は作成中のセッションに対してprivateであるため、テーブルロックヒントは必要ありません。グローバル一時テーブル(##temp)またはtempdbに作成された通常のテーブル(dbo.temp)には、複数のセッションからアクセスできるため、テーブルロックヒントが必要です。

最小限のロギング最適化が完全に適用されていない場合でも、tempdbで作成されたテーブルは、REDO情報をログに記録する必要がないなど、他の最適化の恩恵を受けます。ドキュメント化されていないsys.fn_dblogを使用して、行またはページがログに記録されているかどうかをテストできます。通常のロギングでは、LOP_INSERT_ROWSなどの行にログが記録されます。


SQL Server 2016でINSERT...SELECTクエリを使用して並列実行するには、TABLOCKをローカルの一時テーブルに追加する必要があることに注意してください。マイクロソフトサポート技術情報の記事を参照してください。

SQL Server 2016でINSERT .. SELECT操作を実行するとパフォーマンスが低下します

18
Paul White 9