自律型AIデータベースによるDatabase In-Memoryの使用

Autonomous AI Databaseで利用可能なDatabase In-Memory機能は、リアルタイム分析と混合ワークロードのパフォーマンスを大幅に改善できます。

データベース・インメモリーについて

Oracle AI Database In-Memory (Database In-Memory)は、リアルタイム分析と混合ワークロードのパフォーマンスを大幅に改善する一連の機能です。

データベース・インメモリー機能は、次の場合に役立ちます。

  • オンプレミス・データベースでインメモリー機能を有効にし、オンプレミス・データベースからAutonomous AI Databaseに移行しています。

  • データベース内の問合せでは、ほとんどのランタイム・スキャンとデータのフィルタリング、および結合とグループごとの集計の実行が行われます。

  • 分析的な性質を持つ問合せのレスポンス時間を改善する必要があります。

インメモリー列ストアは、Database In-Memoryの主な機能です。インメモリー列ストアは、インメモリー領域(システム・グローバル領域(SGA)のオプション部分)に存在します。インメモリーに対して有効にすると、表、パーティション、サブパーティションおよびマテリアライズド・ビューがインメモリー列ストアの列形式で移入されます。この列形式は、非常に高速なスキャン用に最適化されており、これにより、分析問合せで行形式ベースの問合せよりも高速に実行できるようになります。詳細は、Oracle AI Database In-Memoryを参照してください。

インメモリー列ストアは、最もホットなINMEMORYオブジェクトに対応するために、時間の経過とともに動的に増加します。PRIORITY表句を使用するか、連続した表スキャンを使用して、インメモリー列ストアがワークロードに合せて十分に大きくなるようにできます。詳細は、インメモリー列ストアのサイズ設定を参照してください。

DDL文でINMEMORY句を使用すると、次のオブジェクトに対してインメモリーを有効にできます。

  • 表(外部表を含む)

  • パーティションまたはサブパーティション

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

詳細は、「インメモリー移入に対するオブジェクトの有効化」を参照してください。

データベース・インメモリーを有効にする場合は、次の点に注意してください。

  • Database In-Memoryは、次を含むAutonomous AI Databaseインスタンスでのみ使用できます。

    • ECPUコンピュート・モデル

    • 最小16 ECPU

  • データベースを再起動する場合、INMEMORYに対して有効化されたオブジェクトはインメモリー列ストアに再移入する必要があります。優先度の設定によっては、自動または初回アクセス時に再移入が行われる場合があります。パフォーマンスを監視している場合、オブジェクトが再移入されるまでパフォーマンスが低下します。

インメモリー移入に対するオブジェクトの有効化

インメモリー列ストアで移入するオブジェクトを有効または無効にできます。

INMEMORY句のあるオブジェクトのみが、インメモリー列ストアへの移入の対象になります。DDL文CREATE TABLEまたはALTER TABLEを使用して、INMEMORY句を適用します。

デフォルトでは、オブジェクトはNO INMEMORY属性で作成されます。これは、インメモリー列ストアへの移入に適していないことを意味します。

オブジェクトをINMEMORYとして有効化するということは、オブジェクトがインメモリー列ストアに存在可能であると指定するということだ。インメモリー移入は個別のステップであり、データベースが既存の行フォーマット・データを読み取って、その行フォーマットを列形式に変換してインメモリー列ストアに格納するときに発生します。デフォルトで、INMEMORY属性が指定されたオブジェクトのすべての列が、インメモリー列ストアに移入されます。

オブジェクト上でINMEMORY属性を設定することは、そのオブジェクトがインメモリー列ストアへの移入の候補であることを意味します。オブジェクトはインメモリー列ストアにすぐに移入されません。ただし、PRIORITY句をINMEMORY属性とともに使用して、インメモリー列ストアへの移入の優先度を制御できます。PRIORITY句は、次の値で指定できます。

  • CRITICAL: オブジェクトは、データベースがオープンされた直後に移入されます。

  • HIGH: オブジェクトは、すべてのCRITICALオブジェクトが移入された後に移入されます(インメモリー列ストアに使用可能な領域が残っている場合)。

  • MEDIUM: オブジェクトは、CRITICALおよびHIGHのオブジェクトがすべて移入された後に移入されます(インメモリー列ストアに使用可能な領域は残っている場合)

  • LOW: オブジェクトは、CRITICALHIGHおよびMEDIUMのオブジェクトがすべて移入された後に移入されます(インメモリー列ストアに使用可能な領域が残っている場合)。

  • NONE: オブジェクトは、初めてスキャンされた後にのみ移入されます(インメモリー列ストアに使用可能な領域があれば)。優先度NONEがデフォルトの優先度です。

INMEMORY属性を使用して表を作成する例:

CREATE TABLE im_emp (
    id  NUMBER,  name VARCHAR2(20),
    depno NUMBER,  sal   NUMBER,
    mgr   NUMBER,
    loc   VARCHAR2(20))
    INMEMORY;

この例では、INMEMORY属性を使用してim_emp表を作成します。この例では、INMEMORY句にデフォルトの優先度NONEを使用します。これは、表が初めてスキャンされた後にのみ移入されることを意味します。

PRIORITY句をINMEMORY属性とともに使用する例:

CREATE TABLE im_emp_1 (
    id  NUMBER,  name VARCHAR2(20),
    depno NUMBER,  sal   NUMBER,
    mgr   NUMBER,
    loc   VARCHAR2(20))
    INMEMORY PRIORITY CRITICAL;

既存の表のINMEMORY属性を設定する例:

ALTER TABLE employees INMEMORY;

この例では、employees表のin INMEMORY属性を設定します。

表を変更して、表の列のサブセットに対してのみINMEMORY属性を設定することもできます。次に例を示します。

ALTER TABLE im_emp_tb INMEMORY NO INMEMORY(depno);

この例では、im_emp_tbのin INMEMORY属性を設定しますが、depno列は除外されます。

詳細は、INMEMORY_TABLE_CLAUSEを参照してください。

表に対してINMEMORYを有効にした後、V$IM_SEGMENTSビューを問い合せて、表のデータがインメモリー列ストアに移入されているかどうかを判断できます。次に例を示します。

SELECT SEGMENT_NAME, POPULATE_STATUS
FROM   V$IM_SEGMENTS
WHERE  SEGMENT_NAME = 'IM_EMP';

詳細は、V$IM_SEGMENTSを参照してください。

オブジェクトがインメモリー列ストアに移入されると、オブジェクトが削除または移動されたとき、またはオブジェクトがNO INMEMORY属性で更新されたときにのみ、オブジェクトが削除されます。次に例を示します。

ALTER TABLE im_emp NO INMEMORY;

詳細は、「インメモリー移入の動作」を参照してください。

インメモリーの移入に対してオブジェクトを有効にするためのノート:

  • データベースはNONEPRIORITY設定でインメモリー・オブジェクトを自動的に移入しません。ただし、これらのオブジェクトをインメモリー列ストアに手動で移入できます。詳細は、「IM列ストアの手動移入」および「DBMS_INMEMORY.POPULATEプロシージャ」を参照してください。

  • インメモリー列ストアがワークロードに対して十分に大きくなるように、継続的な表スキャンが必要です。オブジェクトが部分的に移入されている場合、表スキャンではインメモリーとExadataスマート・スキャンの両方を使用できます。

インメモリー列ストアのサイズの設定

自律型AIデータベース・インスタンスに16以上のECPUがある場合、データベース・インメモリー機能はデフォルトで有効になり、SGAの最大50%をインメモリーで使用できます。

インメモリー領域のメモリーは事前に予約されておらず、インメモリー領域の初期サイズは0です。インメモリー領域は、インメモリー移入に十分な領域がないたびに徐々に増加します。

インメモリー列ストア内のオブジェクトは、自動インメモリー(AIM)によって動的に管理されます。Autonomous AI Databaseでは、自動インメモリーがデフォルトで有効になっています。

AIMは内部統計を使用して、インメモリー・オブジェクトおよび列へのアクセス頻度を決定します。インメモリー列ストアが一杯で、より頻繁にアクセスされる他のセグメントがインメモリー列ストアへの移入を利用する場合、インメモリー列ストアは非アクティブなセグメントを削除します。

作業データ・セットが常に移入されるように、AIMは自動的にコールド(アクセス頻度の低い)セグメントを除去します。詳細は、「インメモリー・オブジェクトの管理の自動化」を参照してください。

自律型AIデータベースのデフォルトの最大インメモリー・サイズは、SGAサイズの最大50%です。ただし、Autonomous AI Databaseの最大インメモリー・サイズを変更できます:

  • 自律型AIデータベースのECPU数を変更します。

  • DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGEプロシージャを使用して最大インメモリー・サイズを変更します。0から70の範囲の値を指定できます。ゼロ(0)値を指定すると、データベース・インメモリーが無効になります。次に例を示します。

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(60);
END;
/

この例では、最大インメモリー・サイズをSGAサイズの60%に変更します。

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

V$INMEMORY_AREAビューを問い合せて、インメモリー領域内の領域割当てに関する情報を取得します。次に例を示します。

SELECT * FROM V$INMEMORY_AREA;

詳細は、V$INMEMORY_AREAを参照してください。

インメモリー列ストアの無効化

Autonomous AI Databaseのインメモリー列ストアを無効にするには、最大インメモリー・サイズを0に変更します。

たとえば:

BEGIN
    DBMS_INMEMORY_ADMIN.SET_SGA_PERCENTAGE(0);
END;
/

この例では、最大インメモリー・サイズの値をゼロ(0)に変更し、インスタンスのデータベース・インメモリーを無効にします。

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