2011-07-07 12 views
2

私は何百万(24mil)以上のレコードがあるテーブルに10,000レコードを挿入するクエリで速度テストを実行しています。クエリ(下記)は重複レコードを挿入しません。SQL Server 2008のクエリの散発的実行時間

MERGE INTO [dbo].[tbl1] AS tbl 
USING (SELECT col2,col3, max(col4) col4, max(col5) col5, max(col6) col6 FROM #tmp group by col2, col3) AS src 
ON (tbl.col2 = src.col2 AND tbl.col3 = src.col3) 
WHEN NOT MATCHED THEN 
INSERT (col2,col3,col4,col5,col6) 
VALUES (src.col2,src.col3,src.col4,src.col5,src.col6); 

上記のクエリの実行時間は散発的です。どこでも0:02秒から2:00分の範囲です。

これらのテストは、10,000行のデータを(#tmpテーブルに)作成するスクリプトを介してSQL Server Studio内で実行しています。次に、上記のMERGEクエリが実行されます。ポイントは、私が実行するテストごとに同じ正確なスクリプトが実行されていることです。

回のように秒単位から分単位に周りバウンス実行:

  • 試験#1:午後12時10秒
  • 試験#2:1:13分
  • 試験#3:0: 02秒
  • 試験#4:1時56分
  • 試験#5:0時05秒
  • 試験#6:1:22分

私が興味深いと感じるメトリックの1つは、秒/分の交互シーケンスが比較的一貫していることです。つまり、他のすべてのテストでは秒単位でテストされます。

このクエリにこのような散発的な実行時間が発生している原因について私に何か手がかりを与えることはできますか?

+0

他の可能性を排除しましたか?ネットワークの待ち時間、DBが他の要求の処理などで時々非常に忙しいですか? –

+0

これは非常におなじみです[私の質問](http://stackoverflow.com/questions/4600883/sql-2005-connection-using-classic-ado-from-windows-2008-yields-odd-performance)。私はあなたが何が起こっているのか理解しているかどうかを知ることに興味があります。 –

+0

@Jeff - DBはSQL Studioと同じマシンに置かれているので、ネットワークの待ち時間は考慮する必要はありませんか?限り、他の可能性を排除する限り、私はどこを見て開始するか分からない。 – Jed

答えて

1

私は新しいデータベースとターゲット表を作成し、25万ドルを追加私は散発的な実行時間の原因が何であったかを言うことがしたいが、私は、私はこの問題を回避するために何をしたかを言うことができる...

ターゲット表に記録します。それから、10kのレコードをターゲットテーブルに繰り返し挿入することで、新しいデータベース/テーブルに対して独自のテストを実行しました。結果は、aproxの一貫した実行時間は0:07秒(各10k挿入に対して)でした。

私は、私の開発者のラップトップより2倍のCPU /メモリを持つマシンで全く同じテストを行った。結果は0:00秒の一貫した実行時間でした(新しいdevマシンの時です))

私は問題の原因を発見しないことを嫌いですが、この場合は私はそれを良いと呼ぶ必要があります移動してください。うまくいけば、いつか、StackOは熱心にこの質問を良い答えで更新することができます。

+1

あなたの解決策に基づいて、それは悪い統計または断片化でした。 – JNK

関連する問題