...

Oracle9i のマテリアライズド・ビュー マテリアライズド・ビュー

by user

on
Category: Documents
105

views

Report

Comments

Transcript

Oracle9i のマテリアライズド・ビュー マテリアライズド・ビュー
Oracle9i のマテリアライズド・ビュー
Oracleホワイトペーパー
2001年5月
Oracle9i のマテリアライズド・ビュー
エクゼクティブ・サマリー...............................................................................................3
はじめに ..............................................................................................................................3
なぜサマリー管理を使用するのか ...................................................................................4
サマリー管理のコンポーネント.......................................................................................5
スキーマ要件.................................................................................................................5
ディメンション...................................................................................................................5
ディメンション定義に関するヒント .........................................................................7
マテリアライズド・ビュー...............................................................................................8
マテリアライズド・ビューの作成 .............................................................................8
独自の事前作成済マテリアライズド・ビューの使用 .............................................9
マテリアライズド・ビュー内での索引選択 .............................................................9
マテリアライズド・ビューで何ができるのか .......................................................10
マテリアライズド・ビューの無効化 .......................................................................11
セキュリティ上の問題...............................................................................................11
マテリアライズド・ビューのロードとリフレッシュ .................................................11
完全リフレッシュ.......................................................................................................12
高速リフレッシュ.......................................................................................................12
リフレッシュと制約...................................................................................................13
データ可用性...............................................................................................................13
パーティション・メンテナンス操作とマテリアライズド・ビュー....................14
問合せのリライト.............................................................................................................14
問合せのリライトの有効化/無効化 ..........................................................................14
問合せのリライトのタイプ .......................................................................................15
完全一致.................................................................................................................15
サマリーの再結合 .................................................................................................15
サマリー・ロールアップとすべての集計 .........................................................16
データのサブセット.............................................................................................16
問合せのリライトの整合性モード ...........................................................................17
結果の整合性...............................................................................................................17
リトライの検証...........................................................................................................18
サマリー・アドバイザ.....................................................................................................19
ワークロードの用意...................................................................................................19
マテリアライズド・ビューの推奨 ...........................................................................20
推奨事項の実装.....................................................................................................20
ワークロードのフィルタ化 .................................................................................20
マテリアライズド・ビューのサイズの予測 ...........................................................21
結論 ....................................................................................................................................21
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
2
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
Oracle9i のマテリアライズド・ビュー
エクゼクティブ・サマリー
データ・ウェアハウス、データ・マートあるいは OLTP システムのいずれであるか
にかかわらず、今日のデータベースには有用な情報が潤沢に埋もれています。しか
し、特に膨大な量のデータを検索しなければならない場合、これらの情報をタイム
リーに検出して有効に活用するのは困難を極めます。
マテリアライズド・ビューは、このようなデータへのアクセスおよびレポート手段
を提供することで、この問題の解決を支援します。
はじめに
マテリアライズド・ビューは、Oracle8i で導入された「サマリー管理」というコン
ポーネントの一部です。マテリアライズド・ビューは従来サマリーや集計表と呼ば
れていたものです。本書では、マテリアライズド・ビューの作成および管理方法、
そして、問合せ応答時間を向上させるための、問合せのリライト機能について説明
します。この機能により、データベース・ユーザーはどのマテリアライズド・ビュー
が存在するのかをまったく意識せずに済みます。
マテリアライズド・ビューは、データベース内部に物理的に存在する特殊なビュー
であると考えられます。このビューには結合や集計を含むことができ、負荷の大き
な結合や集計などの操作を実行前に計算しておくことで、問合せの実行時間が短縮
されます。
現在、独自のサマリーを使用する組織は、手動によるサマリーの作成、作成対象の
選定、サマリーの索引化、サマリーの更新およびユーザーへの選択の推奨などに多
大な時間を費やしています。
しかしこれからは、DBA は 1 回マテリアライズド・ビューを作成するだけで、後
はデータ・ソースが変更されるたびに自動的に更新されます。さらに、DBA にど
のマテリアライズド・ビューを作成、削除および保持すべきかを推奨するサマ
リー・アドバイザというコンポーネントも存在します。
マテリアライズド・ビューを使用する最大の利点の 1 つは、データ・ウェアハウス
やデータベースのユーザーが実感できます。ユーザーはもはや、DBA からどのマ
テリアライズド・ビューが存在するか報告を受ける必要がなくなります。かわりに、
ユーザーはデータベース内の表あるいはビューに対して通常通りに問合せを発行
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
3
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
することができます。この SQL 問合せは、Oracle サーバー内の問合せのリライト
機構により、マテリアライズド・ビューを使用するよう自動的にリライトされます。
したがって、問合せ応答時間が大幅に向上し、エンド・ユーザー側でサマリーに対
して意識する必要性がなくなります。
なぜサマリー管理を使用するのか
なぜサマリー管理を使用するのか
データ・ウェアハウスのエンド・ユーザーに何を期待するのかと尋ねたら、ほとん
どのユーザーが「高速かつ正確な情報」と答えるでしょう。しかしこれでは、「地
域 y で販売した製品 x の数量は?」という問合せに答える際に、表内の行をすべて
読み取らないようにするにはデータへの高速なアクセス経路が必要になるため、
ウェアハウス・デザイナにとっては大きな課題となります。
このような課題に対する最も一般的な対応の 1 つが、サマリー表、オラクルの機能
としては、マテリアライズド・ビューの作成です。このためには、通常のワークロー
ドを把握し、より縮小されたサイズの、必要な情報の結合または集計(あるいはそ
の両方)が含まれるマテリアライズド・ビューを作成する必要があります。たとえ
ば、前出の問合せに答えるには、各販売地域ごとに、各製品および販売数量を 1 行
で表示するマテリアライズド・ビューが必要になります。したがって、ある企業が
5 つの地域で 2,000 の製品を販売した場合、読み取られる行の最大数は、実際に販
売された品目の数に関係なく 10,000 行となります。
マテリアライズド・ビューが常に正確でなければならないというのは当然ですが、
このテクニックでは、エンド・ユーザーの読み取り行数が常に一定に保たれること
によって、結果がすぐに返されるというところに利点があります。データベースが
テラバイト規模に成長し続ける中では、このような方法を使って問合せ応答時間を
短縮する必要性がますます高まります。
今日では、多くのサイトで独自のサマリー表が使用されています。したがって、
Oracle サマリー管理を使用することで、次のような特別な利点が生じます。
•
Oracle サーバー内の問合せのリライト機構は透過的で、たとえマテリアライ
ズド・ビューに問合せ要件をすべて満たす能力がなくても、マテリアライズ
ド・ビューを使用できます。
•
洗練された問合せのリライトにより、週、月、年などの異なる集計レベルの
レポートに対して 1 つのマテリアライズド・ビューを使用できます。
•
マテリアライズド・ビューのリフレッシュを自動的に行う機構(1 つの要求
ですべてのマテリアライズド・ビューがリフレッシュされます)
。
•
DBA はどのマテリアライズド・ビューを作成するかについて時間とられる
ことがなくなります。かわりに、DBA にはデータベースまたはデータ・ウェ
アハウスへの以前の問合せ統計に基づいて、どのサマリーが必要になるかに
ついて情報が提示されます。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
4
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
サマリー管理のコンポーネント
サマリー管理は、次の 5 つのコンポーネントからなります。
•
ディメンション
•
マテリアライズド・ビュー
•
リフレッシュ
•
問合せのリライト
•
サマリー・アドバイザ
すべてを使用する必要はありませんが、より多くのコンポーネントを選択すること
でより大きな利点が得られます。ここでは、これらのコンポーネントについて詳細
に説明します。
スキーマ要件
マテリアライズド・ビューで使用できるスキーマのタイプあるいはデザインについ
ての制約はありません。したがって、データ・ウェアハウス環境ではスキーマがス
ノーフレーク・スキーマ設計であっても問題なく、またこれは必ずしも必要ではあ
りません。
OLTP システムにおけるデータベース設計テクニックについて熟知しているデータ
ベース・デザイナの場合でも、データ・ウェアハウスでは異なるルールやテクニッ
クが適用されることを認識しておく必要があります。たとえば、通常、OLTP シス
テムは正規化されているため、時間ディメンションが「日」
、
「月」、
「年」の 3 つの
表で表されます。各「日」行と 1 つのみの「月」行をリンクし、各「月」行と 1 つ
のみの「年」行をリンクするための結合条件が必要となります。データ・ウェアハ
ウス実装では、通常、完全に非正規化されたディメンション表が使用され、「日」、
「月」および「年」のすべての列が 1 つの表に含まれます。ただし、マテリアライ
ズド・ビューは、設計で使用されている表が正規化表か非正規化表であるかにかか
わらず使用することができます。
ディメンション
マテリアライズド・ビューの作成前段階の最初のステップは、スキーマを検討して
ディメンションを把握することです。ディメンションは、列間の階層(親/子)関
連を定義します。この場合、列は同じ表からのものでなくても構いません。データ
のディメンションは、問合せのリライトやサマリー・アドバイザの判断能力を向上
させるためにも、定義しておくことを強くお薦めします。
データベース・デザイナが直面するもう 1 つの問題は、問合せにはディメンション
列が直接含まれず、そのディメンション列に関連する列を参照している場合が多い
ということです。たとえば、問合せは特定の「日」ディメンションではなく「火曜
日」という列を参照する場合があります。したがって、ディメンションを定義する
際には、ディメンション列と表内の他の列の関連も定義する必要があります。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
5
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
図 1 は、
2 つの階層を持つ時間ディメンションを示しています。
ある日付について、
1 つの階層ではどの会計週、会計月または会計年度を示すかが表されており、もう
1 つの階層では「day」、「month」、「quarter」および「year」の関連が定義されてい
ます。
階層を定義する際には、複数の列を指定して階層を記述することができます。たと
えば、
「City」が各「State」では一意であるが、全「State」にわたっては一意でな
い場合、
「City」レベルから「State」レベルへの厳格な 1:n の階層関連要件を満た
すためには、地理階層を(Country, State, <State, City>)と指定する必要がありま
す。
ディメンションは、次の 2 つの方法のいずれかを使用して作成できます。
•
SQL CREATE DIMENSION 文(図 2 を参照)
•
Oracle Enterprise Manager のディメンション・ウィザード
図 1: 時間ディメンション
All
F_year
Year
F_qth
Qtr
F_mth
DBA は、図 1 のようにディメンショ
ンを図表化することで、定義プロセ
スをより円滑に進められれます。各
楕円はディメンションのレベルを示
し、LEVEL 句によって宣言されてい
ます。ディメンション階層は、
HIERARCHY 句によって宣言されて
います。サマリー管理では、階層レ
ベルの各レベルの列が非 NULL であ
ることを確実にするために、DBA が
制約を定義します。
図 2 は、このディメンションを作成
する SQL 文を示しています。レベル
Month
F_week 名はディメンション表内の列に対応
しています。各階層は、それらのレ
ベル名によって記述されています。
Day
最後に、ATTRIBUTE 句によって直
接関連する品目が定義されています。
したがって、属性「calendar_month_name」は、レベル「month」に関連しているこ
とがわかります。
ディメンション間の 1:n 結合関連は、JOIN KEY 句によって宣言されており、ファ
クト表とディメンション表の間では、ファクト表上の FOREIGN KEY および NOT
NULL 制約によって表されています。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
6
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
ディメンション定義に関するヒント
ディメンションを作成するための簡単な手順は、次のとおりです。
1.
キーマ内のディメンションおよびディメンション表をすべて把握する。ディメ
ンションが正規化されている(複数の表に格納されている)場合、ディメンショ
ン表間の結合で、各子側の行が 1 つのみの親側の行に結合されていることを確
認します。非正規化ディメンションの場合は、子側の列が一意に親側(あるい
は属性)の列を指定していることを確認します。これらの規則に従わないと、
問合せで誤った結果が返されます。
2.
ディメンション内の階層を把握する。たとえば、
「日」は「月」の子であり(
「日」
レベル・データは「月」単位で集計できます)、
「四半期」は「年」の子です。
3.
層 の 各 レ ベ ル 内 に け る 属 性 の 依 存 関 係 を 把 握 す る 。 た と え ば 、「 that
calendar_month_name」が「月」の属性だということを把握します。
4.
データ・ウェアハウスのファクト表から各ディメンションへの結合を把握し、
各結合において各ファクト行が 1 つのみのディメンション行と結合されている
ことを確認する。この条件は宣言する必要があり、オプションで規定すること
もできます。宣言するには、ファクト・キー列に FOREIGN KEY および NOT
NULL 制約を追加し、親側の結合キーに PRIMARY KEY を追加します。これら
の制約は、NOVALIDATE オプションを有効にすることで使用できます。これ
により、表内のすべての行が制約に従っていることを検証するための時間を短
縮できます。問合せのリライトで非検証済制約を使用するために、すべての非
検証済制約に対して新しい RELY 句が必要になります。
図 2: 時間ディメンションを作成する SQL 文
CREATE DIMENSION times_dim
LEVEL day
IS TIMES.TIME_ID
LEVEL month
IS TIMES.CALENDAR_MONTH_DESC
LEVEL quarter
IS TIMES.CALENDAR_QUARTER_DESC
LEVEL year
IS TIMES.CALENDAR_YEAR
LEVEL fis_week IS TIMES.WEEK_ENDING_DAY
LEVEL fis_month IS TIMES.FISCAL_MONTH_DESC
LEVEL fis_quarter
IS TIMES.FISCAL_QUARTER_DESC
LEVEL fis_year IS TIMES.FISCAL_YEAR
HIERARCHY cal_rollup
( day
CHILD OF
month CHILD OF
quarter CHILD OF
year )
HIERARCHY fis_rollup
( day CHILD OF
fis_week CHILD OF
fis_month CHILD OF
fis_quarter CHILD OF
fis_year )
ATTRIBUTE day DETERMINES
(day_number_in_week, day_name, day_number_in_month,
calendar_week_number)
ATTRIBUTE month DETERMINES
(calendar_month_desc, calendar_month_number,
calendar_month_name, days_in_cal_month, end_of_cal_month)
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
7
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
ATTRIBUTE quarter DETERMINES
(calendar_quarter_desc,calendar_quarter_number,
days_in_cal_quarter, end_of_cal_quarter)
ATTRIBUTE year DETERMINES
(calendar_year, days_in_cal_year, end_of_cal_year)
ATTRIBUTE fis_week DETERMINES
(week_ending_day, fiscal_week_number) ;
マテリアライズド・ビュー
ディメンションの定義が完了したら、マテリアライズド・ビューを作成できます。
ここから先は、当面はマテリアライズド・ビューが何であるかについての説明に集
中しますが、後で、アドバイザ機能がどのように作成対象マテリアライズド・ビュー
を推奨するかについても説明します。
マテリアライズド・ビュー定義には、SUM MIN、MAX、AVG,、COUNT(*)、COUNT(x)、
COUNT(DISTINCT)、VARIANCE あるいは STDDEV、1 つ以上の結合された表、お
よび GROUP BY などの集計が含める事ができます。索引化およびパーティション
化可能で、CREATE、ALTER および DROP などの基本 DDL 操作を適用できます。
マテリアライズド・ビューはデータベース内のオブジェクトであるため、マテリア
ライズド・ビューは次の理由で索引のような働きを持ちます。
•
マテリアライズド・ビューを使用する目的は問合せ実行性能を向上させるこ
とである。
•
マテリアライズド・ビューの存在は SQL アプリケーションに対して透過的
であるため、DBA は SQL アプリケーションに影響を及ぼすことなく適宜に
テリアライズド・ビューの作成および削除が行える。
• ・ マテリアライズド・ビューは一部記憶領域を占有するため、基礎となる
詳細表が変更された場合には更新される必要がある。
多くのサイトで、独自のサマリーが定義されているデータ・ウェアハウスが使用さ
れています。そこで、既存のサマリーを問合せリライト用に登録しておくことで、
はじめからサマリー表を作り直す手間を省く事ができます。
マテリアライズド・ビューの作成
マテリアライズド・ビューは、CREATE MATERIALIZED VIEW 文を使って作成し
ます。図 3 は、
「costs_mv」という名前のマテリアライズド・ビューを作成する文
を示しています。このマテリアライズド・ビューでは、time および prod_nam 別に
コストの合計が計算されます。
マテリアライズド・ビューを定義する際には、いくつかの単純な規則に従う必要が
あります。SELECT リストには、すべての GROUP BY 列が含まれている必要があ
り、GROUP BY 列は単純な列でなければなりません。集計する場合に、副問合せ
やネスト化された集計ファンクションを含まない、任意の SQL 値表現でなければ
なりません。WHERE 句には、ベース列上の同一レベル結合述語のみしか含めるこ
とができません。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
8
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
マテリアライズド・ビューでは、独自の記憶領域指定が行えます。格納する表領域
およびそのエクステント・サイズを指定します。パーティション句を含めることで、
マテリアライズド・ビューのコンテンツを複数の表領域に格納することもできます。
マテリアライズド・ビュー定義では、表とビューの両方を使用できます。したがっ
て、前出の例をとると、コストが表であり、製品がビューであることも可能なので
す。ビューはすべて使用できますが、SYSDATE および USER などのファンクショ
ンを使用したユーザー依存のデータを持つものは使用できません。
図 3: マテリアライズド・ビューを作成する SQL 文
CREATE MATERIALIZED VIEW costs_mv
PCTFREE 0
STORAGE (initial 8k next 8k pctincrease 0)
BUILD IMMEDIATE
REFRESH FAST ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT time_id, prod_name,
SUM( unit_cost) AS sum_units,
COUNT(unit_cost) AS count_units,
COUNT(*) AS cnt
FROM costs c, products p
WHERE c.prod_id = p.prod_id
GROUP BY time_id, prod_name;
独自の事前作成済マテリアライズド・ビューの使用
データ・ウェアハウスがすでに導入されているサイトには、サマリーやそのメンテ
ナンス用のプロシージャがすでに搭載されている可能性があります。すなわち、サ
マリーの再作成を行わずに問合せのリライト機能を活用すべき状況と言えます。
既存の表は、ON PREBUILT TABLE 句が含まれる CREATE MATERIALIZED VIEW
文を使って登録できます。マテリアライズド・ビュー名は表名と同じでなければな
らず、この表を作成する問合せを記述する SELECT 文も必要になります。問合せの
精度と表の精度を必ず一致しない事もあります。これを克服するために、WITH
REDUCED PRECISION 句を指定に含めます。
マテリアライズド・ビュー内での索引選択
マテリアライズド・ビューに含まれる行数および増分リフレッシュするかどうかに
よっては、マテリアライズド・ビュー上で索引を作成する必要が生じることがあり
ます。したがって、まず、すべてのマテリアライズド・ビュー・キーが含まれる一
意のローカル索引を作成することを検討してください。他の索引には、各マテリア
ライズド・ビュー・キー列ごとの単一列ビットマップ索引などがあります。
索引の作成時には、各索引の記憶領域要件およびそれらの索引によるリフレッシュ
時間への影響を考慮することも忘れないでください。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
9
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
マテリアライズド・ビューで何ができるのか
マテリアライズド・ビューで何ができるのか
マテリアライズド・ビューの作成前またはそれが作成された直後、DBA は、これ
が高速リフレッシュ可能であるかそうでないか、そしてなぜリフレッシュできない
のかなど、このマテリアライズド・ビューで何ができるかについて疑問に思うこと
でしょう。プロシージャ DBMS_MVIEW.EXPLAIN_MVIEW を使用すると、この疑
問を解消できます。
図 3 で作成したマテリアライズド・ビューを参照してください。
定義から COUNT(*)
を削除して、
図 4 で示されるようにプロシージャ DBMS_MVIEW.EXPLAIN_MVIEW
をコールします。コスト表がパーティション化されていて、すべてのタイプの問合
せのリライトが可能なため、パーティション変更追跡(Partition Change Tracking:
PCT)を行えることがわかります。ただし、DML 後の高速リフレッシュは、マテ
リアライズド・ビューから COUNT(*)が欠けているため使用できません。
図 4: マテリアライズド・ビューの情報の取得例
TRUNCATE TABLE mv_capabilities_table;
EXEC DBMS_MVIEW.EXPLAIN_MVIEW (' SELECT time_id, prod_name,
SUM( unit_cost) AS sum_units, COUNT(unit_cost) AS
count_units, COUNT(*) AS cnt
FROM costs c, products p
WHERE c.prod_id = p.prod_id
GROUP BY time_id, prod_name');
SELECT capability_name, possible, related_text, msgtxt
FROM mv_capabilities_table;
PCT_TABLE:Y
COSTS:
PCT_TABLE:N
PRODUCTS:relation is not a partitioned table
REFRESH_COMPLETE:Y
REFRESH_FAST:Y
REFRESH_FAST_AFTER_ANY_DML:N
see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled
REFRESH_FAST_AFTER_INSERT:Y
REFRESH_FAST_AFTER_ONETAB_DML:N
COUNT(*) is not present in the select list
REFRESH_FAST_PCT:Y
REWRITE:Y
REWRITE_FULL_TEXT_MATCH:Y
REWRITE_GENERAL:Y
REWRITE_PARTIAL_TEXT_MATCH:Y
REWRITE_PCT:Y
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
10
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
マテリアライズド・ビューの無効化
マテリアライズド・ビューは、含まれているデータが最新であるよう、常に監視さ
れています。マテリアライズド・ビューを無効化するのは、無効なデータが返され
ないことを確認するためです。マテリアライズド・ビューは、ベースとなるオブジェ
クトが変更された場合、失効とマークされます。
マテリアライズド・ビューの状態は、表 USER_MVIEWS を問い合せることで確認
できます。マテリアライズド・ビューの状態について少しでも疑問がある場合は、
コマンド ALTER MATERIALIZED VIEW COMPILE を発行して、最新の状態を確認
してください。
セキュリティ上の問題
データベース内の情報の一部がアクセス制限されているとします。問合せのリライ
トは、このようなセキュリティをバイパスするための機能なのではないかと思われ
がちです。しかし、セキュリティ検証はすべて Oracle9i サーバー内で行われるた
め、データおよびマテリアライズド・ビューはむしろこれまで以上に強力に保護さ
れます。マテリアライズド・ビューあるいは詳細表への不正なアクセスを防止する
場 合 、 CREATE MATERIALIZED VIEW を 使 用 す る た め に は CREATE
MATERIALIZED VIEW 権限、詳細表には SELECT WITH GRANT 権限、そしてマ
テリアライズド・ビュー・コンテナ・オブジェクトには SELECT WITH GRANT 権
限および INSERT 権限が必要です。また、要求でユーザーが表に対するアクセス権
を保持していて、複数のマテリアライズド・ビューがそれらの表で定義されている
場合、ユーザーはマテリアライズド・ビュー・コンテナ表に対応付けられた権限と
は関係なく、マテリアライズド・ビューにアクセスします。したがって、どこから
問合せを行おうと、データにはセキュリティ・チェックを通過したユーザーしかア
クセスできません。
マテリアライズド・ビューのロードとリフレッシュ
マテリアライズド・ビューのロードとリフレッシュ
サマリー表を使う上での従来からの問題は、初期ロードおよびそれに続くサマリー
表の更新でした。これらの問題は、サマリー管理が提供する次の機構により解決さ
れます。
•
データの完全リフレッシュ
•
高速リフレッシュ(変更を追加あるいはマージするのみ)の実行
•
変更時のマテリアライズド・ビューの自動的な更新
したがって、DBA は各マテリアライズド・ビューの作成およびメンテナンスにか
かる時間と、マテリアライズド・ビューを使用することで獲得されるパフォーマン
ス向上に対して検討する必要があります。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
11
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
Oracle 9i では、次のリフレッシュ方法が提供されています。
•
完全
•
高速(変更のみを適用)
•
強制(高速に実行するか、完全リフレッシュを強制実行)
また、次の操作を実行できます。
•
オンデマンドでのリフレッシュ
•
•
固有のマテリアライズド・ビュー別(DBMS_MVIEW.REFRESH)
•
表に依存するマテリアライズド・ビュー別
(DBMS_MVIEW.REFRESH_DEPENDENT)
•
全マテリアライズド・ビュー
(DBMS_MVIEW.REFRESH_ALL_MVIEWS)
コミット時(マテリアライズド・ビューが定義されている表の変更ごと)
ON DEMAND リフレッシュは、上記にリストされたプロシージャのうちのいずれ
かをコールすることで実行できます。これにより、DBA はマテリアライズド・
ビューの更新を完全に自分で制御できるようになります。ON COMMIT リフレッ
シュ方法を選択した場合、ソース・データに対する変更がマテリアライズド・ビュー
に関連していると、このデータを反映するよう該当するマテリアライズド・ビュー
が自動的に更新されます。ただし、このマテリアライズド・ビューへの更新は、ベー
ス表が変更されるトランザクションのコミット処理の一環として行われることに
注意してください。すなわち、元の表と、定義にその表が含まれるすべてのマテリ
アライズド・ビューに対して変更が反映されるため、コミットにかかる時間はわず
かに長くなります。
完全リフレッシュ
マテリアライズド・ビューの完全リフレッシュ時には、まずデータの切捨てが行わ
れ、その後ですべてのデータがロードされます。マテリアライズド・ビューのサイ
ズによっては、これは非常に時間がかかる場合があります。完全リフレッシュは、
次のような場合に有効なテクニックです。
•
挿入する新規行の数が、マテリアライズド・ビューのベースとなる表のカー
ディナリティの 50%以上である場合
•
マテリアライズド・ビューにマージ可能な索引がない場合
•
高速リフレッシュの実行にかかる時間が完全リフレッシュよりも長い場合
高速リフレッシュ
マテリアライズド・ビューが非常に大きい場合、完全リフレッシュを定期的に実行す
るための時間を確保できない場合があります。そこで、かわりに、ファクト表への
変更のみがマテリアライズド・ビューに適用される高速リフレッシュを実行します。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
12
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
ウェアハウスにロードされた新規データがすべて識別され、その表を参照するすべ
てのマテリアライズド・ビューが新規データとともに自動的に更新されます。
高速リフレッシュ処理を実行するには、データに適用された変更が記録されている
必要があります。これは、2 つの方法で行えます。データが SQL*Loader のダイレ
クト・パスを使用してしか挿入されない場合、リフレッシュ機構によりこれが検出
され、ロードする新規データが識別されます。ただし、データ変更のほとんどは、
SQL コマンド INSERT、UPDATE および DELETE を介して行われます。この場合、
MATERIALIZED VIEW LOG が、マテリアライズド・ビューのベースとなるそれぞ
れの表に存在する必要があります。
1 つの表につき 1 つのログが必要で、マテリアライズド・ビュー・ログは表に記録
され、マテリアライズド・ビューには記録されません。したがって、データベース
内で変更された表が 6 つしかない場合、マテリアライズド・ビュー・ログの数も 6
つで足ります。ただし、これらのログを使用するマテリアライズド・ビューの数に
は制限はありません。
すべてのマテリアライズド・ビューが高速レフレッシュに対応しているわけではあ
りません。対応しているかどうかは、プロシージャ
DBMS_MVIEW.EXPLAIN_MVIEW をコールすることで確認できます。このプロ
シージャでは、さらにマテリアライズド・ビューを高速リフレッシュ対応にする方
法もレポートします。
リフレッシュと制約
これまで、制約、特に外部キー制約は、ファクト表上で定義して、ファクト表内の
行がディメンションと一致するようにすることが理想的とされてきました。一部の
DBA は、「制約」という言葉を聞いただけでお手上げ状態になり、パフォーマンス
のオーバーヘッドが生じるのでこのデータベースには制約は作らない、と断言します。
しかし、DBA は次の句を使用することで、データ・チェックを行わずに制約を有
効にできます。
ALTER TABLE <表名> ENABLE NOVALIDATE CONSTRAINT<名前>
データが SQL*Loader のダイレクト・パスを使ってロードされている場合、デフォ
ルトですべての制約が無効化されます。このファクト表のロードが完了した後で、
enable NOVALIDATE 文を発行することで、データ・チェックを行わずにただちに
制約を有効化できます。したがって、データ・ロード時間への影響はなく、制約を
有効にするための時間もかかりません。ただし、ロードされたデータの検証が実行
されていないため、ロードされたデータがすべて、整合性制約にまったく違反しな
いことを確認するのが非常に重要となります。
データ可用性
データのリフレッシュ中でも、マテリアライズド・ビューは使用できます。ただし、
問合せのリライトは、コマンド ALTER SYSTEM SET
QUERY_REWRITE_ENABLED = FALSE を使用することで、すべてのマテリアライ
ズド・ビューがリフレッシュされるまでの間、無効化できます。あるいは、最新の
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
13
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
ロードからのデータをマテリアライズド・ビューに反映する必要がないユーザーの
場合は、セッション・レベルで有効化できます。
パーティション・メンテナンス操作とマテリアライズド・ビュー
Oracle9i には、パーティションへの変更を透過的に検出し、この操作によりマテリ
アライズド・ビュー内のデータの一貫性が失われたかを判断する、パーティション
変更追跡(PCT)というコンポーネントが搭載されています。たとえば、パーティ
ションのマージあるいは追加操作を実行してもマテリアライズド・ビューに影響す
ることはなく、マテリアライズド・ビューは失効としてマークされません。
パーティション変更追跡は、パーティション操作によってどのマテリアライズド・
ビュー行が影響を受けるかを特定するためにも使用できます。たとえば、詳細表
パーティションが切捨てまたは削除された場合、PCT によりマテリアライズド・
ビュー内で影響を受ける行が特定され、削除されます。
プロシージャ DBMS_MVIEW.EXPLAIN_MVIEW を使うと、マテリアライズド・
ビューで PCT を使用できるかどうかを確認できます。
問合せのリライト
エンド・ユーザーが最も実感できる、サマリー管理の最大の利点と言えるのが問合
せのリライト機能です。これは、表やビューについてユーザーが作成した問合せを、
マテリアライズド・ビューからデータをフェッチするように変換することで実行を
高速化するための問合せ最適化テクニックです。エンド・ユーザーーには完全に透
過的であるため、SQL アプリケーションの介入やヒントの提示がまったく必要とさ
れません。これは、Oracle9i サーバーによって、あらゆる適切な SQL アプリケー
ションがマテリアライズド・ビューを使用するようにリライトされるためです。本
書では SQL SELECT 句を参考にしていますが、問合せのリライトは、SELECT 句
を含む INSERT 文および CREATE TABLE 文に対しても適用されます。
問合せのリライトは、様々なタイプの問合せに使用できます。問合せの構成は、マ
テリアライズド・ビューの定義と完全に一致する必要はありません。これは特に予
告なしに新規問合せを実行できるのが特長である、データ・ウェアハウスにおいて
は不可能です。したがって、マテリアライズド・ビューの定義が問合せのごく一部
しか満たせなくても、問合せのリライトは実行されます。
問合せのリライトの有効化/無効化
問合せのリライトの有効化 無効化
問合せのリライトは、次のパラメータが設定されていると実行されます。
ALTER SESSION SET QUERY_REWRITE_ENABLED = TRUE
または
ALTER SYSTEM SET QUERY_REWRITE_ENABLED = TRUE
あるいは、マテリアライズド・ビューが定義されていれば、句 ENABLE QUERY
REWRITE を含めることで、問合せのりライトが有効になります。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
14
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
問合せのリライトを無効にする必要が生じる場合があります。このような場合は、
上記のパラメータを「FALSE」に変更するか、特定のマテリアライズド・ビューに
対して DISABLE QUERY REWRITE 句を使用します。
問合せのリライトのタイプ
Oracle9i で使用可能な問合せのリライトのタイプは豊富にあります。次の例では、
図 5 が示すマテリアライズド・ビューを使って、どのようなことが可能になるのか
を説明します。
図 5: 問合せのリライト用のマテリアライズド・ビューの例
問合せのリライト用のマテリアライズド・ビューの例
CREATE MATERIALIZED VIEW all_cust_sales_mv
BUILD IMMEDIATE
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS
SELECT
c.cust_id,
p.prod_id,
sum(s.amount_sold) AS dollars,
sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
GROUP BY c.cust_id, p.prod_id;
完全一致
最も単純なタイプの問合せのリライトは、マテリアライズド・ビュー定義が問合せ
定義と完全に一致する場合に行われます。すなわち、FROM 句の表は WHERE 句で
結合され、GROUP BY 句のキーは、問合せおよびマテリアライズド・ビュー間で
完全に一致する場合です。たとえば、次の問合せがあるとします。
SELECT
c.cust_id,
sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
GROUP BY c.cust_id, p.prod_id;
これは、Oracle9i によりマテリアライズド・ビュー「all_cust_sales_mv」を使用す
るようにリライトされます。
サマリーの再結合
問合せにサマリー表に格納されていない列への参照が含まれていることがありま
す。このような列は、マテリアライズド・ビューを適切なディメンションへと再結
合することで取得できます。たとえば、前出の問合せを検討してみましょう。ただ
し、cust_it についてレポートするかわりに、このレポートでは cust_last_name を使
用します。
SELECT
c.cust_last_name,
sum(s.quantity_sold) as quantity
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
15
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
GROUP BY c.cust_last_name, p.prod_id;
この問合せにより、マテリアライズド・ビュー「all_cust_sales_mv」にはない列
「c.cust_last_name」が参照されます。しかし、その階層関係から、
「c.cust_last_name」
は「c.cust_id」に依存しています。すなわち、この問合せは「all_cust_sales_mv」
に合せてリライトされ、
「c.cust_last_name」列を取得するために customers 表に再結
合されます。
サマリー・ロールアップとすべての集計
マテリアライズド・ビューの集計が格納されている階層よりも上位のレベルの階層
で、SUM(sales)などの集計が行われた場合、マテリアライズド・ビューを使用して
集計を希望のレベルにロールアップすることで、その問合せをリライトできます。
たとえば、マテリアライズド・ビュー「all_cust_sales_mv」ではデータが customer
レベルでグループ化されていますが、必要なのは「state」レベルのレポートだとし
ます。customer と region の関連を記述する customer ディメンションが作成されてい
るとします。次の問合せでマテリアライズド・ビュー「all_cust_sales_mv」を使用
すると、顧客に関するすべてのデータを集計し、州レベルにロールアップしたレ
ポートが結果として出力されます。
SELECT
c.cust_state_province,
sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
GROUP BY
c.cust_state_province;
データのサブセット
これまでに参照したマテリアライズド・ビューはすべて、全データが含まれている
ものでした。しかし、これではマテリアライズド・ビューそのものが非常に大きく
なってしまいます。Oracle9i では、図 6 に示されるように一部のデータのみが含ま
れるマテリアライズド・ビューを定義できます。ご覧のように、この文には Dublin、
Galway、Hamburg および Istanbul のデータしか含まれていません。
図 6: データのサブセットが含まれるマテリアライズド・ビュー
CREATE MATERIALIZED VIEW some_cust_sales_mv
BUILD IMMEDIATE
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS
SELECT c.cust_id,
p.prod_id,
sum(s.amount_sold) AS dollars,
sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
AND
c.cust_state_province IN
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
16
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
('Dublin','Galway','Hamburg','Istanbul')
GROUP BY
c.cust_id, p.prod_id;
このマテリアライズド・ビューの場合、下記に示す範囲 IN および BETWEEN 句の
ある問合せでリライトすることができます。
SELECT
c.cust_state_province,
sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
AND
c.cust_state_province IN ('Dublin','Galway')
GROUP BY
c.cust_state_province;
問合せのリライトの整合性モード
サマリー管理には、一貫性のないマテリアライズド・ビューを検出し、マーキング
する機能がありますが、こうした一貫性のない状態をなくすために、3 つの整合性
レベルが用意されています。これらのレベルは、パラメータ
QUERY_REWRITE_INTEGRITY で選択します。
•
STALE_TOLERATED
•
TRUSTED
•
ENFORCED(デフォルト)
STALE_TOLERATED モードでは、マテリアライズド・ビューが失効していても常
にマテリアライズド・ビューが使用されます。TRUSTED モードでは、マテリアラ
イズド・ビュー内のデータが最新であり、ディメンションおよび制約で宣言された
リレーションが正しいと、オプティマイザにより認識されます。このモードでは、
制約における整合性はアプリケーションで保守されていると過程され、最初のデー
タが含まれていることを条件にマテリアライズド・ビューがリライトされます。
デフォルトである ENFORCED モードでは、オプティマイザですでに最新のデータ
が含まれていることが認識されており、制約における整合性が保証されているマテ
リアライズド・ビューのみが使用されます。よって制約が一部でもチェックされて
いない場合は、このモードではリライトは行われません。ただし、制約レベルの低
い TRUSTED あるいは STALE_TOLERATED モードを使用すれば、問合せのリライ
トは行われます。
結果の整合性
実際のソース・データではなくマテリアライズド・ビューが SQL 問合せに使用さ
れるときに、リライトの整合性モードによっては返される結果が異なることがあり
ます。
1.
マテリアライズド・ビューが詳細データと同期していないことがあります。通
常、これは、リフレッシュ・プロシージャが保留状態で、STALE_TOLERATED
整合性モードが選択された場合に発生します。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
17
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
2.
参照整合性制約を定義せず、TRVSTED モードで運用している場合には、結合
列が参照整合性に違反することがあります。この場合、いつくかの子側の行が
1 つの親側の行に正しく結合されていません。このような状況に陥るのを避け
るためには、システム規定の整合性制約を使用します。
詳細データにはもはや存在しない行についての情報が含まれるマテリアライズ
ド・ビュー、すなわち、ロールバック・マテリアライズド・ビューを作成すること
ができます。たとえば、マテリアライズド・ビューには 18 か月規模のデータ含ま
れていて、詳細表には 6 か月しか含まれていないとします。したがって、マテリア
ライズド・ビューではなく、ベース表に対する問合せが行われた場合、異なる結果
が返される可能性があります。
リトライの検証
問合せのリライトの使用時には、「この問合せはリライトされるだろうか」あるい
は「なぜこの問合せはリライトされなかったのだろうか」などの質問が最もよく聞
か れ ま す 。 Oracle9i で は 、 こ れ ら の 質 問 に 対 す る 回 答 を プ ロ シ ー ジ ャ
DBMS_MVIEW.EXPLAIN_REWRITE によって提供します。図 7 は、その使用例を
示しています。つまり、これらの情報は、問合せの実行前でも入手することができ
るのです。
問合せテキストは文字列として渡され、プロシージャによって表
REWRITE_TABLE に検索の結果が格納されます。プロシージャの結果を表示する
には、この表に問合せする必要があります。以下の例では、マテリアライズド・
ビュー「some_cust_sales_mv」がこの問合せで使用されていることがわかります。
図 7:リトライの検証の例
リトライの検証の例
DECLARE
querytxt VARCHAR2(1500) := 'SELECT c.cust_id,
sum(s.amount_sold) AS dollars, p.prod_id,
sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
AND
c.cust_state_province IN
(''Dublin'',''Galway'',''Hamburg'',''Istanbul'')
GROUP BY c.cust_id, p.prod_id';
BEGIN
dbms_mview.Explain_Rewrite(querytxt, NULL, 'ID1');
END;
/
SELECT message FROM rewrite_table;
MESSAGE
------------------------------------------------------------QSM-01009:materialized view, SOME_CUST_SALES_MV, matched query
text
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
18
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
QSM-01033:query rewritten with materialized view,
SOME_CUST_SALES_MV
サマリー・アドバイザ
マテリアライズド・ビューを使用することを決定したら、まず初期セットを定義し
ます。これは、特にこの件についての知識が少なかったり、アプリケーションによっ
てコールされる問合せが予測不可能である場合は、DBA にとって大問題となりま
す。
こうした問題の解決を支援するために、サマリー管理には、サマリー・アドバイザ
というコンポーネントが含まれています。これは、プロシージャをコールするか、
Oracle Enterprise Manager から起動できます。サマリー・アドバイザは、次の情報を
提供します。
•
収集されたあるいは仮想のワークロードに基づいてマテリアライズド・
ビューを推奨
•
マテリアライズド・ビューのサイズを予測
•
収集ワークロードに基づいてマテリアライズド・ビューの実際使用率を報告
•
ワークロードに対して使用するフィルタを定義
•
ワークロードのロードおよび検証
•
フィルタ、ワークロードおよび結果の削除
サマリー・アドバイザを使用する前に、DBA はプロシージャ DBMS_STATS を実行
して、データベース内の表およびマテリアライズド・ビューのカーディナリティ情
報を収集する必要があります。この情報は予測プロセスで使用されます。
ワークロードの用意
サマリー・アドバイザでは、ワークロードなしでマテリアライズド・ビューを推奨
できますが、ワークロードがあった方がより最適に動作します。Oracle9i では、こ
れを次の形式で用意します。
•
ユーザー定義(DBMS_OLAP.LOAD_WORKLOAD_USER)
•
SQL キャッシュの現行のコンテンツ
(DBMS_OLAP.LOAD_WORKLOAD_CACHE)
•
Oracle Trace で収集された問合せ
(DBMS_OLAP.LOAD_WORKLOAD_TRACE)
ユーザー定義のワークロードでは、データベース内の表に問合せが格納されます。
これがサマリー・アドバイザによって読み込まれ、ワークロードとして認識されま
す。
これとは別に、SQL キャッシュ内の現行の問合せをワークロードにして、サマ
リー・アドバイザへの入力として使用する方法もあります。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
19
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
Oracle Trace がインストールされている場合、Summary Workload というイベント・
セットが提供されます。
これを有効にすると、問合せのリライトで使用されるすべてのマテリアライズド・
ビューの名前、マテリアライズド・ビューを使用することによって得られる利点、
および使用できた理想的なマテリアライズド・ビューから構成されるワークロード
統計が収集されます。
推奨プロシージャ RECOMMEND_MVIEW_STRATEGY では 1 つのワークロードし
か入力として使用できませんが、複数のワークロードをデータベースに格納して、
どれによって最高の推奨が得られるかを比較することができます。
マテリアライズド・ビューの事項
どのマテリアライズド・ビューを作成するかの推奨事項は、マテリアライズド・
ビ ュー の 推奨 プ ロセ スをステ ッ プご と に解 説 し、実 際に 実 装を 行 う、Oracle
Enterprise Manager のサマリー・アドバイザ・ウィザードから入手できます。
これとは別に、プロシージャ RECOMMEND_MVIEW_STRATEGY をコールするこ
とで推奨事項を生成する方法もあります。どの方法を選択しても、サマリー・アド
バイザでは既存マテリアライズド・ビューを削除あるいは保持するべきか、そして
作成する場合はどれを作成するべきかを推奨します。
プロシージャ DBMS_OLAP.GENERATE_MVIEW_REPORT をコールすると、オプ
ションで、アドバイザの推奨事項、マテリアライズド・ビューの使用率および対象
となる問合せについての情報を提示するレポートを生成できます。
推奨事項の実装
サマリー・アドバイザ・ウィザードを使用する上での最大のメリットの 1 つが、推
奨事項が自動的に実装されることです。
DBMS_OLAP.RECOMMEND_MVIEW_STRATEGY プロシージャがコールされると、
データベースに格納される一連の推奨事項が生成されます。
次に、プロシージャ DBMS_OLAP.GENERATE_MVIEW_SCRIPT がコールされ、こ
れらの推奨事項を実装するために必要な文が含まれる SQL ファイルが作成されま
す。
ワークロードのフィルタ化
DBMS_OLAP.ADD_FILTER_ITEM を使用することでフィルタ化できるため、ワー
クロード全体を常に意識する必要はありません。フィルタは、アプリケーション名、
問合せで使用される表、問合せで使用される表のカーディナリティ、問合せ頻度、
最終問合せ日、表所有者、問合せ優先度、問合せ応答時間、あるいは追跡収集名に
適用できます。これらのフィルタのうち複数を、マテリアライズド・ビュー推奨の
際に考慮されるワークロードに適用できます。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
20
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
マテリアライズド・ビューのサイズの予測
DBA にとって役立つもう 1 つの機能は、マテリアライズド・ビュー作成の前にそ
のサイズを予測する機能です。問合せをパラメータとしてプロシージャ
DBMS_OLAP.ESTIMATE_MVIEW_SIZE に渡すことで、図 9 に示されるように、こ
のマテリアライズド・ビュー内の行数および推定サイズを予測します。
図 9: マテリアライズド・ビューのサイズの予測
DECLARE
no_of_rows NUMBER;
mv_size
NUMBER;
BEGIN
dbms_olap.estimate_summary_size ('MV 1',
'SELECT
c.cust_id, sum(s.amount_sold) AS dollars,
p.prod_id, sum(s.quantity_sold) as quantity
FROM
sales s , customers c, products p
WHERE
c.cust_id = s.cust_id
AND
s.prod_id = p.prod_id
GROUP BY
c.cust_id, p.prod_id' ,
no_of_rows, mv_size );
DBMS_OUTPUT.put_line ( '');
DBMS_OUTPUT.put_line ( 'No of Rows:' || no_of_rows );
DBMS_OUTPUT.put_line ( 'Size of Materialized view (bytes): ' ||
mv_size ); END;
No of Rows: 245504
Size of Materialized view (bytes): 21604352
結論
データ・ウェアハウスあるいはデータベースでの問合せの性能を向上させたいと考
えるユーザーは、一部の問合せの結果を事前計算できる場合は、マテリアライズ
ド・ビューの実装を真剣に検討することをお薦めします。マテリアライズド・ビュー
は最小限の操作で作成可能で、サマリー・アドバイザによりどれを作成するかの推
奨や、それらの推奨事項を実行するためのスクリプトが作成されます。
一度作成されると、マテリアライズド・ビューのメンテナンスはほとんど自動的に
行われ、エンド・ユーザーは SQL の行を 1 つも変えることなく、問合せ応答時間
の飛躍的な向上を実現できるのです。
Oracle9i のマテリアライズド・ビュー、Oracle ホワイトペーパー
2001 年 5 月
21
Oracle Corporation 発行の
「Oracle9i Materialized Views, An Oracle White Paper」
の翻訳版です。
Oracle9i のマテリアライズド・ビュー
2001 年 5 月
原本著者:Dr. Lilian Hobbs
原本協力著者:
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
世界共通窓口:
電話: +1.650.506.7000
FAX: +1.650.506.7200
http://www.oracle.com/
Oracle Corporation provides the software that powers the Internet.
Oracle はオラクル社の登録商標です。掲載されている様々な製品名
およびサービス名は、オラクル社の商標です。他のすべての製品名
およびサービス名は、それぞれの所有者の商標です。
Copyright © 2000 Oracle Corporation
All rights reserved.
Fly UP