私は何百万(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つは、秒/分の交互シーケンスが比較的一貫していることです。つまり、他のすべてのテストでは秒単位でテストされます。
このクエリにこのような散発的な実行時間が発生している原因について私に何か手がかりを与えることはできますか?
他の可能性を排除しましたか?ネットワークの待ち時間、DBが他の要求の処理などで時々非常に忙しいですか? –
これは非常におなじみです[私の質問](http://stackoverflow.com/questions/4600883/sql-2005-connection-using-classic-ado-from-windows-2008-yields-odd-performance)。私はあなたが何が起こっているのか理解しているかどうかを知ることに興味があります。 –
@Jeff - DBはSQL Studioと同じマシンに置かれているので、ネットワークの待ち時間は考慮する必要はありませんか?限り、他の可能性を排除する限り、私はどこを見て開始するか分からない。 – Jed