17 自動マテリアライズド・ビューの使用
Oracle Databaseリリース21c以降では、マテリアライズド・ビューを自動的に作成およびメンテナンスできます。
Oracle Databaseでは、問合せパフォーマンスを最適化するために、マテリアライズド・ビューを自動的に作成および管理できます。DBAがほとんどまたはまったく操作することなく、バックグラウンド・タスクによってワークロードの特性が監視および分析され、マテリアライズド・ビューでSQLパフォーマンスが向上する可能性があるのはどこかが特定されます。候補のマテリアライズド・ビューのパフォーマンス上の利点は、ワークロードで確認する前に(ワークロード問合せを使用して)バックグラウンドで測定されます。
ノート:
自動マテリアライズド・ビューでは、パーティション化された実表とパーティション化されていない実表がサポートされます。マテリアライズド・ビューの増分リフレッシュがサポートされています。また、パーティション表では、パーティション・チェンジ・トラッキング(PCT)ビューのリフレッシュがサポートされています。PCTベースのリフレッシュの対象となるには、パーティション化された実表が、範囲、リストまたはコンポジット・パーティション化のいずれかを使用している必要があります。パフォーマンス上の利点がある場合、自動マテリアライズド・ビュー推奨事項には、マテリアライズド・ビューの実表のパーティション化に基づくパーティション化された自動マテリアライズド・ビューが含まれます。サポートされているパーティション化タイプは、ファクト表のパーティション化をミラー化する自動リスト・パーティション化です。
自動マテリアライズド・ビューのメンテナンス・モジュールは、リフレッシュ時点で最も有益なリフレッシュのタイプを決定し、実行時に増分リフレッシュから完全リフレッシュに切り替えるかどうかを決定します。
自動マテリアライズド・ビューの概要
データベースは、ワークロード情報、ワークロード問合せおよび問合せ実行統計を自動的に収集します。また、ワークロードの履歴のメンテナンスおよびパージも実行します。これにより、時間のかかるDBAタスクが排除されます。
自動マテリアライズド・ビューは最小限のDBA操作で実行できますが、その動作は簡単に調整できます。
次に、自動マテリアライズド・ビュー機能の概要を示します。
- ワークロード問合せ実行統計を自動的に検出して収集します。これには、バッファ読取り、データベース時間、推定コストおよびその他の統計が含まれます。
- データベース・ワークロードから隠された候補のマテリアライズド・ビューを作成し、予測されるパフォーマンス上の利点が得られることを確認します。これを行うには、バックグラウンドでワークロード問合せのサンプルをテスト実行します。
- パフォーマンス・テストの結果および実装されているマテリアライズド・ビューの詳細を示すレポートを提供します。
- マテリアライズド・ビューの自動リフレッシュを提供します。
データベースは、自動マテリアライズド・ビューのうち、利点がメンテナンスのコストを大幅に上回るもののみを実装します。利点がわずかであるものは実装しません。
オブジェクト・アクティビティ・トラッキング・システムによって提供されるワークロード情報
自動マテリアライズド・ビューでは、自動意思決定プロセスの一環として、オブジェクト・アクティビティ・トラッキング・システム(OATS)によって提供されるワークロード情報が使用されます。
Oracle Database 21c以降、オブジェクト・アクティビティ・トラッキング・システム(OATS)によって、データベース・オブジェクトに関連付けられた様々なアクティビティが追跡されます。自動マテリアライズド・ビュー機能は、このシステムのクライアントの1つです。自動マテリアライズド・ビューの場合、OATSによって提供される使用状況データが、マテリアライズド・ビューの作成またはリフレッシュ、および最適なリフレッシュ・タイプと最適なリフレッシュ・スケジュールの決定における費用対効果分析に入力されるデータの1つになります。
選択した任意の数の表内のアクティビティのスナップショットがOATSによって定期的に取得されます。各表のスナップショットでは、スナップショット間隔の開始から終了までの表内のスキャン、ロード、挿入/更新/削除、切捨ておよびパーティション関連アクティビティの数が取得されます。DBAは、DBMS_ACTIVITY
PL/SQLパッケージを使用して、OATS取得間隔、スナップショット保存期間および領域制限を設定できます。
たとえば、DBA_ACTIVITY_TABLE
ビューには、各スナップショット内で取得された使用状況データが表示されます。
自動マテリアライズド・ビューおよびOATSに関する情報を提供するデータ・ディクショナリ・ビュー
Oracle Database 21cでは、データベースに、自動マテリアライズド・ビューおよびOATS (オブジェクト・アクティビティ・トラッキング・システム)に関する情報を表示するデータ・ディクショナリ・ビューが含まれています。
自動マテリアライズド・ビューを監視するためのビュー
次のデータ・ディクショナリ・ビューを使用して、自動マテリアライズド・ビューの構成を確認し、自動マテリアライズド・ビューのアクティビティの様々な側面を調べます。
-
DBA_AUTO_MV_ANALYSIS_ACTIONS
アクション、コマンド、アドバイザ固有のフラグ、コマンド・パラメータなど、分析およびチューニング・タスクに関する情報が表示されます。
DBA_AUTO_MV_ANALYSIS_EXECUTIONS
同時実行性、ユーザーによってリクエストされた並列度(DOP)および実行終了時の実際のDOP、ステータス、関連するアドバイザ、情報またはエラー・メッセージなど、分析およびチューニングの実行に関する情報が表示されます。
DBA_AUTO_MV_ANALYSIS_RECOMMENDATIONS
自動マテリアライズド・ビューに関連付けられている推奨事項が表示されます。
DBA_AUTO_MV_ANALYSIS_REPORT
タスク名と実行名、ジャーナル・エントリの連番、ジャーナルのメッセージ・エントリなど、分析および推奨事項に関するレポート。
DBA_AUTO_MV_ANALYSIS_TASK
タスク識別子とタスクの説明、作成日と最終変更日、実行データ、親タスク、ステータス、その他の情報など、自動マテリアライズド・ビューに関連付けられている分析の詳細が表示されます。
DBA_AUTO_MV_CONFIG
現在の自動マテリアライズド・ビューの構成が表示されます。
ノート:
このビューに表示される構成パラメータは、DBMS_AUTO_MV
パッケージのCONFIGURE
プロシージャを使用して更新できます。DBA_AUTO_MV_MAINT_REPORT
自動マテリアライズド・ビューのメンテナンス・アクションに関連付けられている日付、時間およびメッセージが表示されます。
DBA_AUTO_MV_REFRESH_HISTORY
自動マテリアライズド・ビューの各リフレッシュの所有者名、ビュー名、日付、開始時間と終了時間、経過時間、ステータスおよびエラー番号(エラーが発生した場合)が表示されます。
-
DBA_AUTO_MV_VERIFICATION_REPORT
検証に関連付けられているタスク名、実行名およびメッセージが表示されます。
DBA_AUTO_MV_VERIFICATION_STATUS
検証の所有者、開始/終了タイムスタンプ、使用されるSQLチューニング・セットおよび各検証で使用されるSQLパフォーマンス・アナライザ・タスクが表示されます。
OATSを監視するためのビュー
DBA_ACTIVITY_CONFIG
OATSを制御する構成パラメータの現在の値が表示されます。
ノート:
このビューに表示される構成パラメータは、DBMS_ACTIVITY
パッケージのCONFIGUREプロシージャを使用して更新できます。DBMS_ACTIVITY_TABLE
OATSによって最近取得された表アクティビティのスナップショットについて説明します。
DBA_ACTIVITY_SNAPSHOT_META
OATSによって取得されたアクティビティのスナップショットに関する情報が表示されます。
DBA_ACTIVITY_MVIEW
OATSによって最近取得されたマテリアライズド・ビュー・アクティビティのスナップショットについて説明します。
関連項目:
DBMS_AUTO_MVパッケージ
このパッケージには、自動マテリアライズド・ビューを制御するためのプロシージャが含まれています。
DBMS_AUTO_MV.CONFIGURE
DBAは、DBMS_AUTO_MV
のCONFIGURE
プロシージャを使用して、自動マテリアライズド・ビューを起動、停止および構成できます。
表17-1 構成プロシージャ・パラメータ
パラメータ | 説明と例 |
---|---|
AUTO_MV_MODE |
REPORT ONLY: レポート専用モードです。
|
AUTO_MV_MAINT_TASK |
|
AUTO_MV_SPACE_BUDGET |
自動マテリアライズド・ビューを実装するために、これらのビューが作成された表領域内に配分される領域の割合を指定します。これは、表領域内のすべての自動マテリアライズド・ビューおよび関連する索引によって使用される合計領域の割合です。
配分を超えた場合(おそらく自動マテリアライズド・ビューの増加が原因)、最も使用されていない自動マテリアライズド・ビューが削除されます。 値は、1から100の整数です。デフォルトは67 (表領域の合計量の67%)です。
|
AUTO_MV_DEFAULT_TABLESPACE |
自動マテリアライズド・ビューを作成するためのデフォルト表領域を指定します。使用可能な値は、有効な一時表領域の名前またはNULL (デフォルト)です。NULL の場合、新しい自動マテリアライズド・ビューは親オブジェクトの所有者のデフォルト表領域に作成されます。複数の実表に定義されているマテリアライズド・ビューなど、ビューに複数の親オブジェクトがある場合は、最大の実表の所有者のデフォルト表領域が選択されます。
値が動的に変更された場合、変更は自動マテリアライズド・ビューの推奨事項が次に実装されたときに有効になります。
|
AUTO_MV_TEMP_TABLESPACE |
自動マテリアライズド・ビューの作成またはリフレッシュに使用する一時表領域を指定します。使用可能な値は、有効な一時表領域の名前またはNULL です。NULL の場合、表領域は自動マテリアライズド・ビューの最大の親オブジェクトの所有者に割り当てられます。デフォルトはNULL です。
|
AUTO_MV_RETENTION |
自動マテリアライズド・ビューが問合せなしで存在し続けることができる日数を指定します。この保存時間を超えても自動マテリアライズド・ビューが使用されない場合は、自動的に削除されます。
使用可能な値は1から373までの任意の整数です。デフォルトは33日です。
|
AUTO_MV_ANALYZE_REPORT_RETENTION |
AUTO_MV_ANALYZE_REPORT_RETENTION 分析および推奨履歴を保持する最大日数を指定します。使用可能な値は0から90までの任意の整数です。値0は、履歴が保持されないことを意味します。デフォルトは31日です。
|
AUTO_MV_VERIFY_REPORT_RETENTION |
検証履歴を保存する最大日数を指定します。使用可能な値は0から90までの任意の整数です。値0は、検証履歴が保持されないことを指定します。デフォルトは31日です。
|
AUTO_MV_MAINT_REPORT_RETENTION |
自動マテリアライズド・ビュー・メンテナンス(リフレッシュ)の履歴をDBA_AUTO_MV_REFRESH_* ディクショナリ表に保持する最大日数を指定します。使用可能な値は0から90までの任意の整数です。値0は、リフレッシュ履歴が保持されないことを指定します。デフォルトは31日です。
|
AUTO_MV_ANALYZE_WORKLOAD_WINDOW |
最新のスナップショットからの問合せを調査して推奨する最大時間数を指定します。使用可能な値は1から8760までの任意の整数です。デフォルトは24時間です。
|
AUTO_MV_ANALYZE_WORKLOAD_MIN_TIME |
自動マテリアライズド・ビューの推奨事項で問合せが考慮される最小時間を秒単位で指定します。このしきい値を下回る問合せは、推奨事項とみなされません。使用可能な値は0から3600までの任意の整数です。デフォルトは120秒です。
|
AUTO_MV_SCHEMA |
自動マテリアライズド・ビューの作成時に含めるスキーマまたは除外するスキーマを指定します。スキーマが構成の包含リストまたは除外リストに追加されます。最初は、両方のリストが空で、自動マテリアライズド・ビューが有効になっているデータベース内のすべてのスキーマに自動マテリアライズド・ビューを作成できます。包含リストと除外リストは、AUTO_MV_SCHEMA を複数回コールすることで作成できます。
ブール
すべてのスキーマの処理を有効または無効にするには、スキーマを
NULL として指定します。これは、ALLOW の値に応じて、すべてを有効または無効にします。
|
AUTO_MV_APP_MODULE |
自動マテリアライズド・ビューの作成に含める、または作成から除外するアプリケーション・モジュールを指定します。
|
DBMS_AUTO_MV.DROP_AUTO_MVS
このプロシージャは、自動マテリアライズド・ビューを削除します。DBAロールを持つユーザーのみが実行できます。
パラメータ | 説明 |
---|---|
OWNER |
自動マテリアライズド・ビューの所有者の名前です。 |
MV_NAME |
自動マテリアライズド・ビューの名前です。 |
ALLOW_RECREATE |
必要に応じてマテリアライズド・ビューの再作成を許可します。オプションです。 |
OWNER
が指定され、MV_NAME
がNULL
に設定されている場合、OWNER
が所有するすべての自動マテリアライズド・ビューが削除されます。
exec dbms_auto_mv.drop_auto_mvs(‘SH’, ‘AUTO_MV$$_G2MKPB9SA1FB7’, TRUE);
exec dbms_auto_mv.drop_auto_mvs(‘SH’, ‘AUTO_MV$$_G2MKPB9SA1FB7’);
exec dbms_auto_mv.drop_auto_mvs(‘SH’, '');
exec dbms_auto_mv.drop_auto_mvs(‘SH’, '', TRUE);
DBMS_AUTO_MV.RECOMMEND
DBMS_AUTO_MV.RECOMMEND
は、特定のSQLチューニング・セットに基づいて、自動マテリアライズされた推奨事項を生成します。このAPIを使用すると、(自動SQLチューニング・タスクを介さずに)コマンドラインから自動マテリアライズド・ビュー分析および検証を手動で実行できます。ワークロードの開始時間と終了時間を設定し、この実行結果がレポートのみになるか、実際の実装になるかを決定します。ワークロード・ウィンドウにはデフォルトの時間制限はありません。
このAPIを実行するには、DBAロールが必要です。
ノート:
自動マテリアライズド・ビュー構成パラメータは、DBMS_AUTO_MV.RECOMMEND
の結果に影響を与える可能性があります。たとえば、このAPIの分析および推奨事項は、構成パラメータAUTO_MV_SCHEMA
で指定されたスキーマに制限されます。
パラメータ | 説明 |
---|---|
STS_OWNER |
SQLチューニング・セットの所有者の名前。
デフォルト: |
STS_NAME |
SQLチューニング・セットの名前。
デフォルト: |
WORKLOAD_START_TIME |
ワークロード・ウィンドウの開始時間。
デフォルト: |
WORKLOAD_END_TIME |
ワークロード・ウィンドウの終了時間。
デフォルト: 現在のタイムスタンプ。 |
AUTO_MV_MODE |
REPORT ONLY (推奨のみ)またはIMPLEMENT 。
デフォルト: |
例:
SYS_AUTO_STS
を使用して、過去24時間の推奨事項を生成およびレポートします。デフォルトの動作はREPORT_ONLY
で、これは自動マテリアライズド・ビューが実装されないことを意味します。
var exec_name varchar2(200);
begin
:exec_name := dbms_auto_mv.recommend();
end;
SELECT * FROM DBA_AUTO_MV_ANALYSIS_RECOMMENDATIONS
WHERE exec_name = :exec_name;
DBMS_AUTO_MV.REFRESH
DBMS_AUTO_MV.RECOMMEND
APIを使用すると、失効したすべての自動マテリアライズド・ビューを強制的にリフレッシュできます。失効した自動マテリアライズド・ビューは、検証されたクエリー・リライトの利点の値に基づいて、無条件で降順にリフレッシュされます。パラメータはありません。このルーチンは、DBAロールを持つユーザーのみが実行できます。
exec dbms_auto_mv.dbms_auto_refresh();
DBMS_AUTO_MV.REPORT_ACTIVITY
DBMS_AUTO_MV.REPORT_ACTIVITY
APIは、指定された時間ウィンドウ内での自動マテリアライズド・ビューのアクティビティおよび使用状況に関するレポートを生成します。レポートはCLOBとして戻されます。
パラメータ | 説明 |
---|---|
ACTIVITY_START |
時間ウィンドウの開始。
デフォルト: |
ACTIVITY_END |
時間ウィンドウの終了。
デフォルト: |
TYPE |
レポートの形式。'TEXT' 、'HTML' および'XML' がサポートされています。
デフォルト: |
SECTION |
レポートの対象となる1つ以上のセクション。値には、SUMMARY 、MV_DETAILS 、QUERY_DETAILS 、VERIFICATION_DETAILS の任意の組合せまたはALL を使用できます。
デフォルト: ノート: "+"または"-"演算子を使用して、レポートのセクションを含めたり除外する単一文字列を連結します。これは、後述の例のいずれかを参照してください。 |
LEVEL |
レポートの詳細レベル: BASIC 、TYPICAL またはALL 。
デフォルト: |
例:
すべての自動マテリアライズド・ビューのアクティビティに関するレポートを生成します。レポートをHTML形式で出力します。
select dbms_auto_mv.report_activity(type => ‘HTML') from dual;
すべての自動マテリアライズド・ビューのアクティビティに関するレポートを生成します。検証の詳細を除外します。レポートをXML形式で出力します。
select dbms_auto_mv.report_activity(type => ‘XML', section => ‘ALL-VERIFICATION_DETAILS’) from dual;
DBMS_AUTO_MV.REPORT_LAST_ACTIVITY
DBMS_AUTO_MV.REPORT_LAST_ACTIVITY
APIは、最新の自動マテリアライズド・ビューのアクティビティおよび使用状況に関するレポートを生成します。
パラメータ | 説明 |
---|---|
TYPE |
レポートの形式。'TEXT' 、'HTML' および'XML' がサポートされています。
デフォルト: |
SECTION |
レポートの対象となる1つ以上のセクション。値には、SUMMARY 、MV_DETAILS 、QUERY_DETAILS 、VERIFICATION_DETAILS の任意の組合せまたはALL を使用できます。
デフォルト: ノート: "+"または"-"演算子を使用して、レポートのセクションを含めたり除外する単一文字列を連結します。次の例を参照してください。 |
LEVEL |
レポートの詳細レベル: BASIC 、TYPICAL またはALL 。
デフォルト: |
例:
最新のアクティビティの包括的なレポートを、標準レベルの詳細で生成します。レポートをテキスト形式(デフォルト)で出力します。これらの文はいずれも同じ結果を返すことに注意してください。
select dbms_auto_mv.report_last_activity('TEXT', 'ALL', ‘TYPICAL’) from dual;
select dbms_auto_mv.report_last_activity() from dual;
マテリアライズド・ビューのサマリーと詳細のみが含まれる最新のアクティビティのレポートを生成します。最大レベルの詳細でレポートします。XML形式で出力します。
select dbms_auto_mv.report_last_activity(‘XML', 'SUMMARY+MV_DETAILS', 'ALL') from dual;
最新のアクティビティのレポートを、基本レベルの詳細で生成します。検証の詳細を除外します。HTML形式で出力します。
select dbms_auto_mv.report_last_activity(‘XML', 'ALL-VERIFICATION_DETAIL', 'BASIC') from dual;
DBMS_ACTIVITYパッケージ
DBMS_ACTIVITY
PL/SQLパッケージには、オブジェクト・アクティビティ・トラッキング・システム(OATS)情報の収集および管理を構成するためのファンクションおよびプロシージャが含まれています。OATSによって収集されたデータは、自動マテリアライズド・ビューによって実行される分析で使用されます。
DBAは、DBMS_ACTIVITY.CONFIGURE
プロシージャを使用して、特定のデータベース内の3つのOATSパラメータを制御できます。
ACTIVITY_INTERVAL
スナップショット間の間隔。
exec dbms_activity.configure('ACTIVITY_INTERVAL_MINUTES',30)
ACTIVITY_RETENTION_DAYS
スナップショットの保存期間。
exec dbms_activity.configure('ACTIVITY_RETENTION_DAYS',60)
ACTIVITY_SPACE_PERCENT
スナップショット用に予約されている使用可能な領域の量。
exec dbms_activity.configure('ACTIVITY_SPACE_PERCENT',10)
ノート:
OATSは自己管理することが意図されているため、特に、自動マテリアライズド・ビュー機能を使用する場合は、デフォルトの構成をお薦めします。