読者です 読者をやめる 読者になる 読者になる

のぶろぐ 30代のインフラエンジニアはこうです

(;'Д`)ハァハァ ようやく世の中が無菌室で無いことに気づいたよ

マテリアライズドビュー更新時にUNDOが多く必要になる理由

UNDOはDB接続ユーザAとユーザBがいた場合を仮定して、

ユーザAがPAYMENTというレコードの値を書き換えてcommitするまでの間、

ユーザBに対して情報書き換え前のPAYMENTを見せるための領域というイメージ。

 

マテリアライズドビューの更新処理について、なにもオプションを指定しない場合は

DELETE、INSERT処理によって内容が更新されることになる。

この場合、UNDOが必要になるのでマテビュー更新対象のサイズなどによっては

非常に多くのUNDOが必要になります。

 

dbms_mview.refreshでマテビューを更新する際にatomic_refreshオプションを変更することでマテビュー更新時のデータ削除をTRUNCATEにすることができます。これによってマテビュー更新の処理時間や必要UNDO量が改善します。