マテリアライズド・ビューを使用したクラウド・リンクのパフォーマンスの最適化

マテリアライズド・ビューは、リモート・データをコンシューマ・データベースにローカルにキャッシュし、それを増分的にリフレッシュすることで、クラウド・リンクのパフォーマンスを向上させます。これは、ネットワーク上のすべてを毎回再読取りするのではありません。

マテリアライズド・ビューは、パフォーマンス向上のためによく使用されます。特にデータベース・リンクを使用している表またはビューを使用しているローカル・データベースにデータを格納する場合に使用します。同様に、大規模計算または要約がある場合、特にデータ・セットが大きい場合に、ビューのかわりにマテリアライズド・ビューが使用されることがよくあります。マテリアライズド・ビューは指定した間隔でリフレッシュされます。これは、データが必ずしも最新ではないことを意味していますが、マテリアライズド・ビューに対する問合せは前述の例では非常に高速になります。ただし、このようなユースケースでは、これらのマテリアライズド・ビューに対する問合せが大幅に高速化されます。

マテリアライズド・ビューのリフレッシュ

データベースでは、実表の変更後にマテリアライズド・ビューをリフレッシュして、マテリアライズド・ビューのデータを管理します。マテリアライズド・ビューをリフレッシュするとそのすべての索引が自動的に更新されます。完全リフレッシュの場合は、リフレッシュ中にすべての索引を再作成できるように、一時ソート領域が必要です。

マテリアライズド・ビューのリフレッシュのタイプ:

クラウド・リンクを使用するマテリアライズド・ビューの増分リフレッシュ方法は次のとおりです。

  • ログベースのリフレッシュ

様々なリフレッシュ方法については、「マテリアライズド・ビューのリフレッシュ」の章を参照してください。

ノート

パーティション・チェンジ・トラッキング(PCT)リフレッシュおよび論理パーティション・チェンジ・トラッキング(LPCT)リフレッシュは、クラウド・リンクを使用するマテリアライズド・ビューではサポートされていません。

クラウド・リンクを介したマテリアライズド・ビューの増分リフレッシュ

増分リフレッシュは、一般にFASTリフレッシュと呼ばれ、通常は、完全リフレッシュよりも高速に実行されます。

増分リフレッシュにより、マテリアライズ・ビューを最初から再作成する必要がなくなります。このように、変更のみ処理するため、リフレッシュ時間が非常に速くなります。ログベースの高速リフレッシュ方式を使用するマテリアライズド・ビューの場合、実表に対する変更はマテリアライズド・ビュー・ログに保持されます。マテリアライズド・ビュー・ログとは、実表で定義されたマテリアライズド・ビューを増分的にリフレッシュできるように、実表への変更を記録したスキーマ・オブジェクトです。各マテリアライズド・ビュー・ログは、それぞれ1つの実表に関連付けられています。マテリアライズド・ビュー・ログは、実表と同じデータベースおよびスキーマに格納されます。Oracle Autonomous AI Databaseで、クラウド・リンクを介してアクセスするリモート表のマテリアライズド・ビューを定義およびリフレッシュできます。

Autonomous AI Database Serverlessは、FASTリフレッシュを使用してマテリアライズド・ビューの増分リフレッシュを実行します。この方法は、マテリアライズド・ビュー全体の完全リフレッシュを実行するのではなく、前回のリフレッシュ以降に行われた変更のみを適用します。

増分リフレッシュのサポート:
  • フル・データ・リロードなしでダッシュボードとレポートをすばやくリフレッシュできるため、ほぼリアルタイムの分析が可能になります。
  • データ鮮度の向上により、分析ワークロードのサービス・レベル合意(SLA)を改善。

クラウド・リンクによる増分リフレッシュをサポートする様々なタイプのマテリアライズド・ビューについては、「マテリアライズド・ビューのタイプ」を参照してください。

マテリアライズド・ビューの高速リフレッシュを使用したクラウド・リンクの登録

マテリアライズド・ビューの高速リフレッシュがサポートされていることを示すには、クラウド・リンクを登録する必要があります。DBMS_CLOUD_LINKパッケージのREGISTERプロシージャをMV_FAST_REFRESH引数とともに使用して、クラウド・リンクを登録します。

マテリアライズド・ビュー・ログ表がCLOUDLINKスキーマのSALES_VIEW_AGG表に作成されているとします。その後、REGISTERプロシージャでMV_FAST_REFRESH引数にTRUE値を渡すことで、高速リフレッシュ機能を有効にしたクラウド・リンクとして登録できます。
BEGIN
   DBMS_CLOUD_LINK.REGISTER(
    schema_name     => 'CLOUDLINK',
    schema_object   => 'SALES_VIEW_AGG',
    namespace       => 'REGIONAL_SALES', 
    name            => 'SALES_AGG',
    description     => 'Aggregated regional sales information.',
    scope           => 'MY$TENANCY',
    auth_required   =>  FALSE,
    data_set_owner  =>  'tomholl@example.com',
    mv_fast_refresh =>  TRUE );
END;
/
ノート

プロバイダとして、コンシューマ・データベースのマテリアライズド・ビューに対応する、プロバイダ・データベースの実表にマテリアライズド・ビュー・ログ表を作成する必要があります。

詳細は、REGISTERプロシージャを参照してください。

マテリアライズド・ビューの高速リフレッシュによるクラウド・リンクの更新

クラウド・リンクを更新して、マテリアライズド・ビューの高速リフレッシュがクラウド・リンクでサポートされていることを示すことができます。

高速リフレッシュ機能なしでクラウド・リンクが登録されているとします。
BEGIN
   DBMS_CLOUD_LINK.REGISTER(
    schema_name    => 'CLOUDLINK',
    schema_object  => 'SALES_ALL',
    namespace      => 'TRUSTED_COMPARTMENT', 
    name           => 'SALES',
    description    => 'Trusted Compartment, only accessible within my compartment. Early sales data.',
    scope          => 'MY$COMPARTMENT',
    auth_required  =>  FALSE,
    data_set_owner =>  'tomholl@example.com' );
END;
/

マテリアライズド・ビュー・ログ表は、後でCLOUDLINKスキーマのSALES_ALL表に作成されるとします。UPDATE_REGISTRATIONプロシージャでMV_FAST_REFRESH引数にTRUE値を渡すことで、高速リフレッシュ機能を有効にするようにクラウド・リンクを更新できます。

BEGIN
   DBMS_CLOUD_LINK.UPDATE_REGISTRATION(
    namespace       => 'TRUSTED_COMPARTMENT', 
    name            => 'SALES',
    mv_fast_refresh => TRUE );
END;
/

UPDATE_REGISTRATIONプロシージャは、クラウド・リンクを介してマテリアライズド・ビュー・ログ表にアクセスできるようにすることで、クラウド・リンクを介したマテリアライズド・ビューの高速リフレッシュを有効にします。アクセスできるようにするには、MV_FAST_REFRESH引数にTRUEの値を渡す必要があります。

詳細は、UPDATE_REGISTRATIONプロシージャを参照してください。

プロバイダは必要なマテリアライズド・ビュー・ログを作成しています。リンクのメタデータをリフレッシュして、新しいログ表が反映されるようにする必要があります。

例: マテリアライズド・ビューの増分リフレッシュのユースケース

このユースケースでは、クラウド・リンクと高速リフレッシュ・マテリアライズド・ビューを使用して、2つのOracle Autonomous AI Databaseインスタンス間でデータを共有する方法を示します。

営業チームのプロデューサAI Autonomous Database (PRODUCER_DB)がライブ販売トランザクションをCLOUDLINKスキーマ内のSALES_ALLという表に格納する組織について考えてみます。同じOCIコンパートメント内の分析チームのConsumer AI Autonomous Database (CONSUMER_DB)は、登録済のクラウド・リンクを介してこの販売データにアクセスし、クラウド・リンク上に高速リフレッシュのマテリアライズド・ビューTRUSTED_SALES_MVを作成し、レポート用にライブ・データを問い合せます。新しいDesk LampセールをProducerに挿入した後、高速リフレッシュは即座にレポートするためにConsumerへの変更のみを同期します。

ワークフローは、次の9つの重要なステップを示しています。
  1. プロデューサは表を作成し、初期販売データをロードします。
  2. プロデューサは、表を公開するクラウド・リンクを登録します。
  3. プロデューサは、変更を追跡するためのマテリアライズド・ビュー・ログを作成します。
  4. プロデューサは、高速リフレッシュを有効にするためにクラウド・リンク登録を更新します。
  5. コンシューマは、クラウド・リンク上にマテリアライズド・ビューを作成します。
  6. コンシューマは、初期データを検証するためにマテリアライズド・ビューを問い合せます。
  7. プロデューサは、新しい販売トランザクションを挿入します。
  8. コンシューマは、マテリアライズド・ビューに対して高速リフレッシュを実行します。
  9. コンシューマは、マテリアライズド・ビューを再度問い合せて、更新されたデータを表示します。

前提条件

クラウド・リンクを介したマテリアライズド・ビューの増分リフレッシュを実装する前に、次の前提条件が満たされていることを確認してください。

  • クラウド・リンクは適切に構成およびテストされます。
  • マテリアライズド・ビューを作成およびリフレッシュするユーザーに、適切な権限が付与されます。
  • プロバイダ・データベースでは、実表に対してマテリアライズド・ビュー・ロギングが構成されています。

次の各項では、クラウド・リンクを使用して2つのOracle Autonomous AI Databaseインスタンス間でデータを共有するための詳細なワークフローと、実用的なユースケースの例で高速リフレッシュ・マテリアライズド・ビューについて概説します。このワークフローおよび関連するコード例は、要件に応じて変更および実装できます。

ステップ1: 表の作成および初期販売データのロード

営業チームは、販売ID、製品名、数量、単価および販売日を取得して、組織からのすべてのチェックアウト・トランザクションを格納するSALES_ALL表を作成します。Wireless MouseからBluetooth Speakerまでの10個の初期トランザクションをロードします。

CREATE TABLE SALES_ALL (
    sale_id       NUMBER PRIMARY KEY,
    product_name  VARCHAR2(100),
    quantity      NUMBER,
    unit_price    NUMBER(10, 2),
    sale_date     DATE DEFAULT SYSDATE
);

INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (1, 'Wireless Mouse', 2, 25.50, TO_DATE('2026-01-29', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (2, 'Mechanical Keyboard', 1, 89.99, TO_DATE('2026-01-20', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (3, 'USB-C Hub', 3, 45.00, TO_DATE('2026-01-21', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (4, '27-inch Monitor', 2, 299.99, TO_DATE('2026-01-22', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (5, 'Ergonomic Chair', 1, 350.00, TO_DATE('2026-01-23', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (6, 'HD Webcam', 5, 65.25, TO_DATE('2026-01-24', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (7, 'Laptop Stand', 2, 39.95, TO_DATE('2026-01-25', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (8, 'Noise Cancelling Headphones', 1, 199.00, TO_DATE('2026-01-26', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (9, 'External SSD 1TB', 4, 120.00, TO_DATE('2026-01-27', 'YYYY-MM-DD'));
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (10, 'Bluetooth Speaker', 3, 55.00, TO_DATE('2026-01-28', 'YYYY-MM-DD'));


COMMIT;

ステップ2: クラウド・リンクの登録

分析チームと販売データを共有するために、リードDBAはSALES_ALL表にクラウド・リンクを登録します。TRUSTED_COMPARTMENTネームスペース内のSALESという名前のこのクラウド・リンクは、プロデューサ・データへの読取り専用ウィンドウです。プロデューサおよびコンシューマAutonomous AIデータベースは両方とも同じOCIコンパートメントにあるため、DBAはスコープをMY$COMPARTMENTに設定します。

DBMS_CLOUD_LINK.REGISTERプロシージャを使用して、クラウド・リンクを登録します。
BEGIN
   DBMS_CLOUD_LINK.REGISTER(
    schema_name    => 'CLOUDLINK',
    schema_object  => 'SALES_ALL',
    namespace      => 'TRUSTED_COMPARTMENT', 
    name           => 'SALES',
    description    => 'Trusted Compartment, only accessible within my compartment. Early sales data.',
    scope          => 'MY$COMPARTMENT',
    auth_required  =>  FALSE,
    data_set_owner =>  'tomholl@example.com' );
END;
/

ステップ3: マテリアライズド・ビュー・ログの作成

増分リフレッシュ更新を有効にするには、DBAがSALES_ALLにマテリアライズド・ビュー・ログを作成します。このログには、高速リフレッシュに必要なすべての挿入、更新および削除、主キー、ROWIDおよび順序情報が記録されます。

SALES_ALLにマテリアライズド・ビュー・ログを作成します。
CREATE MATERIALIZED VIEW LOG ON SALES_ALL WITH PRIMARY KEY, ROWID, SEQUENCE INCLUDING NEW VALUES;

プロデューサ表全体をスキャンするかわりにマテリアライズド・ビュー・ログを使用すると、コンシューマは前回のリフレッシュ以降の変更のみをリクエストできます。

ステップ4: 高速リフレッシュのためのクラウド・リンクの更新

マテリアライズド・ビュー・ログを使用すると、DBAはクラウド・リンク登録を更新して、このリンク上に構築されたマテリアライズド・ビューの高速リフレッシュを有効にします。

クラウド・リンク登録を更新して、高速リフレッシュを有効にします。
BEGIN
   DBMS_CLOUD_LINK.UPDATE_REGISTRATION(
    namespace       => 'TRUSTED_COMPARTMENT', 
    name            => 'SALES',
    mv_fast_refresh => TRUE );
END;
/

クラウド・リンク・レベルで高速リフレッシュを有効にすると、すべてのコンシューマが増分リフレッシュ更新の恩恵を受けることができます。

ステップ5: マテリアライズド・ビューの作成

Consumer Autonomous AI Databaseインスタンスでは、分析チームは、クラウド・リンクからすべての列を選択するTRUSTED_SALES_MVというマテリアライズド・ビューを作成します。マテリアライズド・ビューはREFRESH FAST ON DEMANDで構成されており、プロデューサのマテリアライズド・ビュー・ログを使用して、各リフレッシュ中に増分変更のみを適用します。

コンシューマに高速リフレッシュ・マテリアライズド・ビューを作成します。
CREATE MATERIALIZED VIEW TRUSTED_SALES_MV REFRESH FAST ON DEMAND AS SELECT * from TRUSTED_COMPARTMENT.SALES@CLOUD$LINK;

アナリストは、プロデューサに影響を与えずに、TRUSTED_SALES_MVに対して複雑な集計、結合およびフィルタを実行できます。高速リフレッシュ用に構成されているため、コンシューマはプロデューサとの同期を維持できます。

ステップ6: マテリアライズド・ビューの問合せ

アナリストは、TRUSTED_SALES_MVを問い合せて、最初の10件の販売トランザクションを表示できるかどうかを確認します。この問合せは、プロデューサSALES_ALL表にロードされたデータと一致するWireless Mouse、Ergonomic Chair、External SSD 1TBなどのアイテムの製品名、数量および単価を返します。

マテリアライズド・ビューを問い合せて初期売上データを取得します。
SELECT PRODUCT_NAME, QUANTITY, UNIT_PRICE FROM TRUSTED_SALES_MV;
サンプル出力:
PRODUCT_NAME				QUANTITY	UNIT_PRICE
Wireless Mouse				2			25.50
Mechanical Keyboard			1			89.99
USB-C Hub					3			45.00
27-inch Monitor				2			299.99
Ergonomic Chair				1			350.00
HD Webcam					5			65.25
Laptop Stand				2			39.95
Noise Cancelling Headphones	1			199.00
External SSD 1TB			4			120.00
Bluetooth Speaker			3			55.00

出力には、コンシューマ・マテリアライズド・ビューに表示される売上データが表示されます。コンシューマは、プロデューサ・データベースに触れることなく販売データにアクセスできるようになりました。

ステップ7: 新規売上データの挿入

その後、組織はデスクランプで販売を開始し、過剰在庫をクリアします。新しいトランザクションが処理され、プロデューサ内のSALES_ALLに挿入されます。マテリアライズド・ビュー・ログは、次のコンシューマ・リフレッシュの変更を追跡して、この新しい行を自動的に取得します。

SALES_ALLに新しい販売を挿入します。
INSERT INTO SALES_ALL (sale_id, product_name, quantity, unit_price, sale_date) VALUES (11, 'Desk Lamp', 10, 24.99, TO_DATE('2026-01-29', 'YYYY-MM-DD'));

COMMIT;

プロデューサは、コンシューマから独立してライブ・トランザクションを処理し続けます。マテリアライズド・ビュー・ログには変更が記録されるため、コンシューマは次回のリフレッシュ時に情報を取得できます。

ステップ8: マテリアライズド・ビューの高速リフレッシュ

コンシューマAutonomous AI Databaseは、'F' (高速)オプションを指定したDBMS_MVIEW.REFRESHプロシージャを使用して、TRUSTED_SALES_MVの高速リフレッシュをトリガーします。リフレッシュ・プロセス中に、プロデューサのマテリアライズド・ビュー・ログから新しいDesk Lamp行のみを使用してTRUSTED_SALES_MVがローカルに更新されます。

マテリアライズド・ビューで高速リフレッシュを実行:
BEGIN
  DBMS_MVIEW.REFRESH('TRUSTED_SALES_MV', 'F');
END;
/

コンシューマAutonomous AI Databaseのリフレッシュでは、10行(または数千行)すべてを再読取りするかわりに、最後のリフレッシュ以降に追加された新しい行のみが取得されます。

ステップ9: 更新されたマテリアライズド・ビューの問合せ

アナリストが同じ問合せを再度実行し、数量が10の新規追加されたDesk Lampと単価が24.99の11行が表示されるようになりました。販売データはすぐにレポートに使用できます。

マテリアライズド・ビューを問い合せて、更新されたデータを確認します。
SELECT PRODUCT_NAME, QUANTITY, UNIT_PRICE FROM TRUSTED_SALES_MV;
サンプル出力:
PRODUCT_NAME				QUANTITY	UNIT_PRICE
Wireless Mouse				2			25.50
Mechanical Keyboard			1			89.99
USB-C Hub					3			45.00
27-inch Monitor				2			299.99
Ergonomic Chair				1			350.00
HD Webcam					5			65.25
Laptop Stand				2			39.95
Noise Cancelling Headphones	1			199.00
External SSD 1TB			4			120.00
Bluetooth Speaker			3			55.00
Desk Lamp					10			24.99

出力には、新しいデスク・ランプ販売など、高速リフレッシュ後に更新された売上データが表示されます。

組織は、Oracle Autonomous AI Database Cloud Linkと高速リフレッシュ・マテリアライズド・ビューを使用して、データ共有を正常に実装しました。