- PR -

個別削除と一括削除の速度の違いについて

1
投稿者投稿内容
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-06-02 16:48
いつもお世話になっております。
件名についてお聞きしたいと思います。
よろしくお願いいたします。

環境:oracle9i

あるテーブル(約300万件データあり)に対して削除処理を行っています。
この処理が1件ずつ削除処理をしていたので、一括削除をしようと考えましたが、
思ったような効果がでずに困っています。

数千件程度の削除処理であれば、一括削除の方が早いのですが、
数十万件になると、途端に一括処理の方が遅くなってしまいます。
どのようなことが考えられるのでしょうか。

ちなみに、個別削除時と一括削除時の違いは、
削除対象データ取得SQLは同一で、
それに対し1件ずつ「delete」文発行しているか、
削除対象データ取得SQLの「select」を「delete」に置換えているかの違いです。

よろしくお願いいたします。



Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-06-02 17:12
引用:

KOXさんの書き込み (2006-06-02 16:48) より:
数千件程度の削除処理であれば、一括削除の方が早いのですが、
数十万件になると、途端に一括処理の方が遅くなってしまいます。
どのようなことが考えられるのでしょうか。


RollBackセグメントの拡張が頻発してるんジャマイカ?

_________________
音速の定時退社!
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-06-02 18:08
Yamさん返信ありがとうございます。
>RollBackセグメントの拡張が頻発してるんジャマイカ?

rollbackセグメントは5ギガほどあって、その3分の1ぐらいが使用されていました。
容量的には十分あるので、拡張の頻発はないと思います。

また、どちらの処理も処理が終了してからcommitしているので、
rollbackセグメントについてはあまり変わらないのかなと思っていたのですが、
どうなのでしょうか?確証はありません。
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2006-06-02 19:51
では外していたようですね。失礼しました。

泥臭い方法ですが
WHERE句に (Key between 10000 and 19999)見たいな感じで適当に件数を分割してマルチスレッドで流してみては同でしょう?
(他にチューニングの手段が無ければ。。。)
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-06-05 09:05
>WHERE句に (Key between 10000 and 19999)見たいな感じで適当に件数を分割してマルチスレッドで流してみては同でしょう?

そうですね。他にない場合は、この手しかないのかなとも思います。
他の方法も模索しつつ、どの方法をとるか検討したいと思います。

とにかくテストに時間がかかり、何パターンも行うことができないので、
結果がでるのに時間がかかると思いますが、何かありましたらお知らせします。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)