96.3 IS_INMEMORY_ELIGIBLEプロシージャ

このプロシージャは、データベースからの自動ワークロード・リポジトリ(AWR)スナップショットを調べて、データベース・インメモリー・テクノロジに対するワークロードの適格性を判別します。

多くのワークロードにはデータベース・インメモリーが有効ですが、そうでないワークロードもあります。IS_INMEMEMORY_ELIGIBLEは、ワークロードについて、データベース・インメモリーの効果があるかどうかを判別し、適格とみなすか不適格とみなすかを決定します。適格性は、ワークロードにおける分析アクティビティの割合で判別されます。データベース・インメモリーを実装する予定の場合は、このツールを使用すると、分析アクティビティが少なくデータベース・インメモリーを使用しても実質的なメリットを見込めない不適格なデータベースを迅速に特定し除外できます。それにより、ワークロードに分析アクティビティがより多く含まれているために大きなメリットを得られるデータベースを、データベース・インメモリー・デプロイメントの対象にできます。

IS_INMEMEMORY_ELIGIBLEで使用される基準

ワークフローがデータベース・インメモリーに適格か不適格かの判別は、システムで定義されているしきい値に基づきます。分析アクティビティに関連するワークロードの割合がこのしきい値を下回っている場合、データベース・インメモリーを使用してもパフォーマンスはあまり向上しません。アクティビティのレベルが、目標の分析ワークロード割合のしきい値より高ければ高いほど、データベース・インメモリーの使用によって得られる可能性があるメリットは大きくなります。

IS_INMEMORY_ELIGIBLEプロシージャの構文

IS_INMEMORY_ELIGIBLEには3つのオーバーロードがあり、これにより、適格性テストの範囲をどのように定義するかを選択できます。出力パラメータは3つすべてで同じです。オプションの入力パラメータSNAP_DBIDも共通です。

入力パラメータは、次の構文で示すように、各オーバーロードに対して相互に排他的です。1つのプロシージャ・コールにおいてそれらを組み合せることはできません。

構文1: 今日を含む直近n日として入力

DBMS_INMEMORY_ADVISE.IS_INMEMORY_ELIGIBLE (
    TIME_WINDOW_DAYS   IN NUMBER,
    INMEM_ELIGIBLE     OUT BOOLEAN,
    ANALYSIS_SUMMARY   OUT VARCHAR2,  
    SNAP_DBID          IN NUMBER DEFAULT NULL
);

構文2: スナップショット範囲として入力

DBMS_INMEMORY_ADVISE.IS_INMEMORY_ELIGIBLE (
    START_SNAP_ID     IN NUMBER,
    END_SNAP_ID       IN NUMBER,
    INMEM_ELIGIBLE    OUT BOOLEAN,
    ANALYSIS_SUMMARY  OUT VARCHAR2,
    SNAP_DBID         IN NUMBER DEFAULT NULL
);

構文3: 時間間隔(開始時間と終了時間)として入力

DBMS_INMEMORY_ADVISE.IS_INMEMORY_ELIGIBLE (   
   START_TIME        IN TIMESTAMP,
   END_TIME          IN TIMESTAMP,
   INMEM_ELIGIBLE    OUT BOOLEAN,
   ANALYSIS_SUMMARY  OUT VARCHAR2,
   SNAP_DBID         IN NUMBER DEFAULT NULL
);

パラメータ

表96-2 IS_INMEMORY_ELIGIBLEプロシージャのパラメータ

パラメータ 説明
TIME_WINDOW_DAYS 今日を含め過去n日以内に発生しているすべてのスナップショット。
START_TIME スナップショット分析の期間の開始時間を指定します。START_TIMEからEND_TIMEまで(この時間も含む)に作成されたすべてのAWRスナップショットが確認されます。
END_TIME スナップショット分析の期間の終了時間を指定します。作成された時間がEND_TIMEより前でSTART_TIME以降であるすべてのAWRスナップショットが確認されます。
START_SNAP_ID 一連のスナップショットにおける最初のスナップショット。これは、分析するワークロードの開始点です。
END_SNAP_ID 一連のスナップショットの最後。
INMEM_ELIGIBLE ワークフローがデータベース・インメモリーに適格(それによるメリットがある)かどうかの判別結果。可能な値: TrueFalse
ANALYSIS_SUMMARY INMEM_ELIGIBLEの評価を説明する分析。例: 測定された分析ワークロード割合は3%であり、目標の分析ワークロード割合である20%を下回っています 分析アクティビティの割合が目標より少ないワークロードは不適格とみなされます。
SNAP_DBID AWRデータのエクスポート元のデータベースのデータベースID。これを使用すると、別のデータベース上のワークロードを分析できます。現行データベースで適格性をテストしている場合は、このパラメータを除外してください。

使用上のノート

指定のワークロード内で、一連のスナップショットにわたり分析アクティビティのレベルが変わる場合があります。使用可能なすべてのスナップショットのうちどのサブセットをテスト用に選択しているかで、IS_INMEMORY_ELIGIBLEで算出される分析ワークロード割合が変わる可能性があります。そのため、異なる入力パラメータを使用して複数の評価を実行することもできます。TIME_WINDOW_DAYSパラメータを使用すると、その時間枠に基づいてワークロードの簡潔な概要が示されます。その後、スナップショットIDに基づきパラメータを使用して特定の期間を詳しく調べると、ワークロードにおけるパターンを把握できます。

データベースでデータベース・インメモリーを有効にするかどうかを検討している場合は、次の手順を実行します。
  1. 候補データベースでインメモリー適格性テストを実行して、データベース・インメモリーを効果的に使用できるデータベースとそうでないデータベースを確認します。
  2. インメモリー適格性テストで不適格と判別されたものを除き、任意のOracle 19cデータベースでインメモリー・アドバイザを実行します。

例1: 入力された過去n日間の時間枠での適格性をテストします。

 set serverout on;
 set lines 200;
 
 DECLARE
     inmem_eligible BOOLEAN;
     analysis_summary VARCHAR2(200);
 BEGIN
     
     dbms_inmemory_advise.is_inmemory_eligible(1, inmem_eligible, analysis_summary);
     
     DBMS_OUTPUT.PUT_LINE(
             CASE WHEN inmem_eligible = TRUE
                 THEN 'Eligibile for In Memory'
                 ELSE 'Not Eligible for In Memory'
             END 
     );
     
     DBMS_OUTPUT.PUT_LINE(analysis_summary);
 
 END;
 /
 

例2: スナップショットIDの範囲を入力として使用して適格性をテストします。

 set serverout on;
 set lines 200;
 DECLARE
     inmem_eligible BOOLEAN;
     analysis_summary VARCHAR2(200);
 BEGIN
     
     dbms_inmemory_advise.is_inmemory_eligible(355, 356, inmem_eligible, analysis_summary);
     
     DBMS_OUTPUT.PUT_LINE(
             CASE WHEN inmem_eligible = TRUE
                 THEN 'Eligibile for In Memory'
                 ELSE 'Not Eligible for In Memory'
             END 
     );
     
     DBMS_OUTPUT.PUT_LINE(analysis_summary);
 
 END;
 /

例3: 時間間隔を入力として使用して適格性をテストします。その時間間隔内で開始し終了しているすべてのスナップショットが含まれます。

 set serverout on;
 set lines 200;
 DECLARE
     inmem_eligible BOOLEAN;
     analysis_summary VARCHAR2(120);
 BEGIN
     
     dbms_inmemory_advise.is_inmemory_eligible(TO_TIMESTAMP('21-JUN-23 05.22.27.262 PM', 'DD-Mon-RR HH:MI:SS.FF AM'), 
                                                TO_TIMESTAMP('21-JUN-23 05.26.04.446 PM', 'DD-Mon-RR HH:MI:SS.FF AM'), 
                                                inmem_eligible, analysis_summary
     );  
 
     DBMS_OUTPUT.PUT_LINE(
             CASE WHEN inmem_eligible = TRUE
                 THEN 'Eligibile for In Memory'
                 ELSE 'Not Eligible for In Memory'
             END 
     );
 
     DBMS_OUTPUT.PUT_LINE(analysis_summary);
 
 END;
 /