山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

Oracleマテリアライズド・ビューの高速リフレッシュの仕組み

今日はOracleのマテリアライズド・ビューの高速リフレッシュの仕組みについて詳しく調べてみました。

  • 高速リフレッシュではマテリアライズド・ビュー・ログを作成する。
  • ログにはテーブルの更新情報が記録され、差分でマテリアライズド・ビューが更新される。
  • マテリアライズド・ビュー・ログのテーブルは「MLOG$_マスターテーブル名」
  • このテーブルには更新がかかった行のキーと時刻などが記録される。
  • リフレッシュ時にはキーからマスターテーブルのデータを引っ張ってきてマテビューに反映させるという動きをしている。
  • MLOG$はいつ削除されるのか。マテビューは複数のリモートDBに存在する場合もある。
  • それを管理しているのがSYS.SLOG$テーブル。マスタ側のDBにある。
  • マスタ表、マテビューのID(SNAPID=MVIEW_ID)、最終更新日が記録されている。
  • 一番古い最終更新日よりも前のログが削除される。
  • どのマテビューなのか知りたい場合はDBA_REGISTERED_MVIEWSを見るとMVIEW_SITEの情報がある。
  • SYS.SLOG$ではSNAPIDというカラム名だったがDBA_REGISTERED_MVIEWSではMVIEW_IDになっている。
  • おそらく昔スナップショットという名称だったのがマテリアライズド・ビューという名称に変わったのでその名残だと思われる。

魔法みたいなマテリアライズド・ビューの高速リフレッシュですが蓋を開けてみれば理解可能な仕組みですね。問題起こった時はこれくらいの理解が必要になるときもあります。