1

データを一時的に一括挿入するカスタム インポート ツールがあります (421776 行)。その後、ツールは不明な行をターゲット テーブルに挿入し、ハッシュ キー (2 つの列の組み合わせ) に基づいて既存の行を更新します。ターゲット データベースの行数はほぼ同じです。更新クエリは次のようになります (更新列が約 20 少ない)

  update targetTable set 
        theDB.dbo.targetTable.code=temp.code,
        theDB.dbo.targetTable.name=temp.name,
  from [tempDB].[dbo].[targettable] as temp 
  where theDB.dbo.targetTable.hash=temp.hash COLLATE SQL_Latin1_General_CP1_CI_AS

照合と nvarchar の比較は少し悪いですが、回避するのは簡単ではありません。それでも、ハッシュ列には独自の一意のインデックスがあります。ローカルでも問題なく動作しますが、私のこのサーバーでは、一時 DB が 21 ギガまで成長し続けています。再インデックスと縮小はまったく機能しません。

tempdb の問題に直面している他のユーザーへの補足事項です。http://bradmcgehee.com/wp-content/uploads/presentations/Optimizing_tempdb_Performance_chicago.pdfをよく読んでください。

4

3 に答える 3

0

トランザクション ログを一時的に完全または一括ログから簡易に変更できます。これにより、ロールバックのためにすべてがログに記録されなくなります。

于 2011-05-03T15:39:01.117 に答える
0

そこに置いたデータで tempdb を明示的に使用しているようです。独自のデータベースであるかのように tempdb を使用する理由はありますか?

tempdb が増大している理由は、そこに明示的にデータを配置しているためです。420k 行は重く聞こえませんが、独自のユーザー データベース内に保持することをお勧めします。

ビジネス ロジックを変更[tempDB].[dbo].[targettable]して、独自のユーザー データベース上の何かに移行することを提案します。

于 2011-05-03T15:39:07.330 に答える
0

明示的な結合がない場合、これはデカルト積ですか?

于 2011-05-03T15:53:44.380 に答える