Infra DevOps

インフラ構築のナレッジや、運用の自動簡易化に関する記事を書いていこうと思います

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

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

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

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

 

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

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

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

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

 

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