- - PR -
個別削除と一括削除の速度の違いについて
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-06-02 16:48
いつもお世話になっております。
件名についてお聞きしたいと思います。 よろしくお願いいたします。 環境:oracle9i あるテーブル(約300万件データあり)に対して削除処理を行っています。 この処理が1件ずつ削除処理をしていたので、一括削除をしようと考えましたが、 思ったような効果がでずに困っています。 数千件程度の削除処理であれば、一括削除の方が早いのですが、 数十万件になると、途端に一括処理の方が遅くなってしまいます。 どのようなことが考えられるのでしょうか。 ちなみに、個別削除時と一括削除時の違いは、 削除対象データ取得SQLは同一で、 それに対し1件ずつ「delete」文発行しているか、 削除対象データ取得SQLの「select」を「delete」に置換えているかの違いです。 よろしくお願いいたします。 | ||||
|
投稿日時: 2006-06-02 17:12
RollBackセグメントの拡張が頻発してるんジャマイカ? _________________ 音速の定時退社! | ||||
|
投稿日時: 2006-06-02 18:08
Yamさん返信ありがとうございます。
>RollBackセグメントの拡張が頻発してるんジャマイカ? rollbackセグメントは5ギガほどあって、その3分の1ぐらいが使用されていました。 容量的には十分あるので、拡張の頻発はないと思います。 また、どちらの処理も処理が終了してからcommitしているので、 rollbackセグメントについてはあまり変わらないのかなと思っていたのですが、 どうなのでしょうか?確証はありません。 | ||||
|
投稿日時: 2006-06-02 19:51
では外していたようですね。失礼しました。
泥臭い方法ですが WHERE句に (Key between 10000 and 19999)見たいな感じで適当に件数を分割してマルチスレッドで流してみては同でしょう? (他にチューニングの手段が無ければ。。。) | ||||
|
投稿日時: 2006-06-05 09:05
>WHERE句に (Key between 10000 and 19999)見たいな感じで適当に件数を分割してマルチスレッドで流してみては同でしょう?
そうですね。他にない場合は、この手しかないのかなとも思います。 他の方法も模索しつつ、どの方法をとるか検討したいと思います。 とにかくテストに時間がかかり、何パターンも行うことができないので、 結果がでるのに時間がかかると思いますが、何かありましたらお知らせします。 ありがとうございました。 | ||||
1
