私たちはかなり広いテーブルBaseDataを持っています。そこには3300万行もあります。次に、すべての種類のパラメータを含むいくつかの他のテーブルに結合する更新クエリがあります。いくつかの関数が適用され、元のIdでグループが存在し、その結果がBaseDataテーブルにいくつかの列で書き戻されます。Oracle 10gエンタープライズでテーブル・ロックが更新文を高速化しますか?
このプロセスは非常に遅いので、私はそれをスピードアップする方法を検討しています。私はSQLServerで多くの経験を積んでいますので、このようなOracleの内部構造はすべてわかりません。
私が推測していることの1つは、更新中にOracleがすべての行のバージョンを作成し、任意の読者がその影響を受けていない行を読み取れることです。しかし、これはかなりのリソースを消費します。テーブルに書き込みロックを取るように更新する方法はありますか?そうすれば、すべての行のバージョンが作成されません。
大規模なアップデートのためのヒントはありますか?私たちはすでにそれをバッチに分割しました。各バッチはテーブルの別々のパーティションにあり、いくつかの更新は並行して実行されます。しかし、それでもずっと遅いです。
Oracleは行のコピーを作成しておらず、読取り一貫性を確保するためにUNDOセグメントを使用しています。すぐに大量の更新を行う別のアプローチを提案します。 – tbone
ステートメントの概要(またはステートメント自体)を投稿できますか? –
こんにちは、すごく悲しいことです。 – gjvdkamp