2013-05-20 9 views
8

私は全体的なパフォーマンスプロジェクトの一環としてファクトテーブルの読み込みを高速化しようとしています。毎晩、約1億2,000万行の約100kのテーブルが追加されています。テーブルはかなり重く索引付けされています。高速ロード先でテーブルロックオプションを使用すると、どのような影響がありますか?

現在、私はSSIS高速ロードOLE DBの宛先を使用しており、100,000行のロードには約15分かかります。これは100k行を挿入するのに非常に高いようでした。そのため、パッケージを変更して結果をステージングテーブルにダンプし、そのステージングテーブルからファクトテーブルにT-SQLを挿入しました。インサートは1分以内に実行されます。

普通のT-SQLの挿入がSSISの高速読み込みよりも高速であることがわかったので、OLEDBの宛先でチェックされたボックスを調べ始めました。 Table Lockがチェックされていないことが判明しました。このオプションをチェックすると、SSISの負荷が1分未満になりました。 私の質問は次のとおりです:

  • テーブルロックを残すことの意味は何ですか?
  • T-SQL挿入ステートメントは既定でテーブルロックを発行するため、最初は高速でしたか?まあ

答えて

7

、私は(より詳細なリファレンスhereを参照)説明は簡単だと思う:

あなたの最初の質問について:

テーブルロック - デフォルトではこの設定がチェックされ、 は、他のプロセスによって同時に同じテーブルが使用されていないかどうかを確認することです。複数の行レベル のロックを取得するのではなく、宛先テーブルのテーブルロックが に取得され、ロックのエスカレーションの問題が発生する可能性があることを指定します。

挿入文は、挿入する必要がある行数がかなり多いため、SQL Serverはテーブルロックを行う可能性が最も高いと考えられます。

これを確認するには、sys.dm_tran_locks DMVを使用して、テーブルに保持されているロックの種類を確認します。結果をどのように解釈するかについての良いサンプルはありません(また、ロックのエスカレーションに関する良い解説もあります):http://aboutsqlserver.com/2012/01/11/locking-in-microsoft-sql-server-part-12-lock-escalation/

+0

ああ、複数の行レベルのロックは遅さを説明します。クール、ありがとう。 – AS2012

+0

@ AS2012:それだけでなく、より多くのロックがより多くのメモリを占有します。私がリンクしている記事は、このトピックに関して非常に関連性があり詳細です。 –

関連する問題