処理が終わったり終わらなかったり。
処理が終わったり終わらなかったり。
SQLServerの統計情報や実行計画に関してその挙動の
理解に苦しんでいます。
もし解決のヒントがいただけたらと思い、質問しました。
よろしくお願いします。
使用しているOSはWindows2008Server x64です。
DBはSQLServer2008 EEを用いています。
サーバー機はXeon 2.93MHz QuadCore×2です。
メモリは32GBで、うち20GBをSQLServerに使用させています。
javaのアプリケーション内でJDBCでDBアクセスしています。
処理は
(1)3000万件程度のデータをメモリ上へ
(2)計算処理してファイルへ
(3)ファイルをDBへBulkInsert
というもので、Javaのほうで8並列処理を行わせています。
この処理がどういうわけか(1)のところで動いたりとまったりします。
(止まっているというよりは、極端に遅くなっているというのが
正確かもしれません。)
経験則としては
・大量データを流す前に少量データで疎通を取った場合にとまる。
・大量データ→大量データではとまらない。
・止まったあと、一度スレッドをとめて統計情報を更新後、再度処理を流すと止まらない
というようなものがあります。
利用状況モニタを見ると、 I/O Completion というものが非常に長い時間処理しており、
なぜ状況によってこの処理時間が延びるのかがわかりません。
また、統計情報を更新したといっても、実行計画が殆ど変わらない場合もあります。
ただ、実行計画が殆ど変わらない(xmlにしてDIFFを取ると1行しか変わらない。)場合も、
再実行すると正常時間で処理が終了します。
何かお気づきの点がありましたら、是非ご教授ください。