85 DBMS_INMEMORY_ADMIN

DBMS_INMEMORY_ADMINは、インメモリー・ファスト・スタート(IMファスト・スタート)領域およびインメモリー式(IM式)を管理するためのインタフェースを提供します。

この章のトピックは、次のとおりです:

参照:

Oracle Database In-Memory機能についてさらに学習するには、『Oracle Database In-Memoryガイド』を参照してください。

85.1 DBMS_INMEMORY_ADMINの概要

このパッケージは、インメモリー式(IM式)およびインメモリー・ファスト・スタート(IMファスト・スタート)領域を管理するためのインタフェースを提供します。

IM式

分析的な問合せには、多くの場合、実行中にCPUおよびメモリーを大量に消費する複雑な式や計算が含まれています。IME_CAPTURE_EXPRESSIONSを使用して、これらのうち頻繁に使用される(ホットな)式を特定し、IME_POPULATE_EXPRESSIONSを使用してIM列ストアに移入します。IM式を使用することにより、データベースで同じ計算が繰返し実行されることがなくなり、パフォーマンスが向上します。

データベースでは、IM式がシステム生成の仮想列として示されます。IM仮想列の名前はSYS_IMEで始まります。DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONSおよびDBMS_INMEMORY.IME_DROP_EXPRESSIONSを使用して、既存のSYS_IME列を削除することもできます。

DBA_IM_EXPRESSIONSビューには、INMEMORY属性を持つSYS_IME列が表示されます。IME_CAPTURE_EXPRESSIONSプロシージャの使用後は、このビューを問い合せて、データベースの異なる表に追加されたホットな式を確認できます。

参照:

IM式についてさらに学習するには、『Oracle Database In-Memoryガイド』を参照してください。

IMファスト・スタート領域

IMファスト・スタート領域に格納されるデータにより、データベースの再起動時にIM列ストアの移入が最適化されます。データベースでは、列データを圧縮またはフォーマットすることなく持続記憶域から直接読み取るため、データベース・インスタンスの再起動時には移入がより高速で行われます。

IM列ストアに対してIMファスト・スタートを有効にする場合、IMファスト・スタート領域のASSM表領域を指定する必要があります。表領域には、SYSDBIMFS_LOGSEG$という名前のSecureFiles LOBのデータが格納されます。SYSAUX表領域にはメタデータが格納されます。データがIM列ストアに移入または再移入されると、データベースにより自動的にデータがIMファスト・スタート領域に書き込まれます。手動で書込みを実行することはできません。オブジェクトをNO INMEMORYとして指定すると、データベースによりそのオブジェクトがIMファスト・スタート領域から削除されます。

IMファスト・スタート領域が不足すると、データベースにより自動的に最も古い15%のセグメントが削除され、列データの保存が継続されます。使用可能な領域がなくなると、IMファスト・スタート領域への書込みが停止します。

参照:

IM式についてさらに学習するには、『Oracle Database In-Memoryガイド』を参照してください。

自動インメモリー

自動インメモリーは、アクセス・トラッキングと列統計情報を使用して、IM列ストアのオブジェクトを管理します。IM列ストアがいっぱいになり、より頻繁にアクセスされる他のセグメントがIM列ストアへの移入から利点を得られる場合、IM列ストアでは、非アクティブなセグメントが削除されます。ただし、IM列ストアがすべてのINMEMORYセグメントを保持するように構成されている場合は、自動インメモリーは何のアクションも実行されません。

デフォルトでは、自動インメモリーは過去31日間の使用統計情報をチェックします。現在の設定を変更するには、DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETERAIM_STATWINDOW_DAYSパラメータを指定します。

参照:

自動インメモリーについてさらに学習するには、Oracle Database In-Memoryガイドを参照してください

85.2 DBMS_INMEMORY_ADMINのセキュリティ・モデル

このパッケージを使用するには、管理者権限が必要です。パッケージのサブプログラムは、実行者の権限で実行されます。

85.3 DBMS_INMEMORY_ADMINの操作上のノート

DBMS_INMEMORY_ADMINファスト・スタート操作は、失敗するまたは中断される場合があります。

失敗または中断シナリオでは、次のルールによって使用できるサブプログラムが決定されます。

  • FASTSTART_ENABLEが成功しなかった場合、許可される操作はFASTSTART_ENABLEの再実行のみです。

  • FASTSTART_MIGRATE_STORAGEが成功しなかった場合、許可される操作はFASTSTART_MIGRATE_STORAGEの再実行のみです。

  • FASTSTART_DISABLEが成功しなかった場合は、すべてのDBMS_INMEMORY_ADMIN操作が許可されます。

85.4 DBMS_INMEMORY_ADMINサブプログラムの要約

この表は、DBMS_INMEMORY_ADMINサブプログラムを示し、簡単に説明しています。

表85-1 DBMS_INMEMORY_ADMINパッケージのサブプログラム

サブプログラム 説明

AIM_GET_PARAMETERプロシージャ

このプロシージャは、自動インメモリーを制御するパラメータの現在の値を取得します。

AIM_SET_PARAMETERプロシージャ

このプロシージャは、自動インメモリーの実行環境をカスタマイズします

FASTSTART_DISABLEプロシージャ

このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)機能を無効にします。

FASTSTART_ENABLEプロシージャ

このプロシージャは、IMファスト・スタートを有効にし、表領域を割り当てます。

FASTSTART_MIGRATE_STORAGEプロシージャ

このプロシージャは、すべてのIMファスト・スタート・データおよびメタデータを既存の表領域から指定された新しい表領域に移動します。

GET_FASTSTART_TABLESPACEファンクション

このファンクションは、現在IMファスト・スタートに指定されている表領域の名前を戻します。

IME_CAPTURE_EXPRESSIONSプロシージャ

このプロシージャは、指定された時間間隔でデータベース内の最も頻繁にアクセスされている(最もホットな)式を20個取得します。

IME_CLOSE_CAPTURE_WINDOWプロシージャ

このプロシージャは、現在の式取得ウィンドウの終了を示します。

IME_DROP_ALL_EXPRESSIONSプロシージャ

このプロシージャは、データベース内のSYS_IME式仮想列をすべて削除します。

IME_GET_CAPTURE_STATEプロシージャ

このプロシージャは、式取得ウィンドウの現在の取得状態および最後に加えられた変更のタイムスタンプを戻します。

IME_OPEN_CAPTURE_WINDOWプロシージャ

このプロシージャは、式取得ウィンドウの開始を示します。

IME_POPULATE_EXPRESSIONSプロシージャ

このプロシージャは、最後に起動されたDBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONSで取得された式を強制的に移入します。

85.4.1 AIM_GET_PARAMETERプロシージャ

このプロシージャは、自動インメモリーを制御するパラメータの現在の値を取得します。

構文

DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(
   parameter   IN    NUMBER,
   value       OUT   NUMBER);

パラメータ

パラメータ 説明
parameter

自動インメモリーを制御する事前定義された定数を指定します。

有効な定数は、スライディング統計情報ウィンドウで日数を指定するAIM_STATWINDOW_DAYSのみです。自動インメモリーでは、この期間を使用してINMEMORYオブジェクトの統計情報をそのアルゴリズムの一部としてフィルタリングします。たとえば、期間を7日間に設定した場合、自動インメモリーではそのアルゴリズムに過去7日間の統計情報のみを考慮します。デフォルトは31です。

value

AIM_STATWINDOW_DAYSに割り当てる値を指定します。

例85-1 統計情報ウィンドウの日数の取得

次のコードは、統計情報ウィンドウの日数を画面に出力します。

VARIABLE b_statwin NUMBER

BEGIN
  DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :b_statwin);
END;
/

PRINT b_statwin

出力例は次のように表示されます。

B_STATWIN
---------
       14

参照:

AIM_GET_PARAMETERの使用方法を学習するには、『Oracle Database In-Memoryガイド』を参照してください

85.4.2 AIM_SET_PARAMETERプロシージャ

このプロシージャは、自動インメモリーの実行環境をカスタマイズします。

構文

DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER(
   parameter   IN    NUMBER,
   value       IN    NUMBER);

パラメータ

パラメータ 説明
parameter

自動インメモリーを制御する事前定義された定数を指定します。

有効な定数は、スライディング統計情報ウィンドウで日数を指定するAIM_STATWINDOW_DAYSのみです。デフォルトは31です。

value

AIM_STATWINDOW_DAYSに割り当てる値を指定します。

例85-2 統計情報ウィンドウの日数の設定

次の例では、ウィンドウの現在の日数を取得し、14に設定した後、値を画面に出力します。

VARIABLE b_statwin NUMBER

BEGIN
  DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :b_statwin);
END;
/

PRINT b_statwin

BEGIN
  DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, 14);
END;
/

BEGIN
  DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(DBMS_INMEMORY_ADMIN.AIM_STATWINDOW_DAYS, :b_statwin);
END;
/

PRINT b_statwin

出力例は次のように表示されます。

 B_STATWIN
----------
        31

 B_STATWIN
----------
        14

参照:

AIM_GET_PARAMETERの使用方法を学習するには、『Oracle Database In-Memoryガイド』を参照してください

85.4.3 FASTSTART_DISABLEプロシージャ

このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)機能を無効にします。

構文

DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE();

セキュリティ・モデル

このプロシージャを実行するには、管理者権限が必要です。

使用上のノート

プロシージャを実行すると、データベースにより次のアクションが実行されます。

  1. すべてのIMファスト・スタート操作が完了するまで待機します。

  2. IMファスト・スタート機能を無効にし、次の操作を実行します。

    • IMファスト・スタート領域を消去します。

    • SYSAUX表領域に格納されているIMファスト・スタート・メタデータを削除します。

    • IMファスト・スタート表領域を解放します(ただし、削除はしません)。

このプロシージャは、IM列ストアの同時操作を中断したり、操作に影響することはありません。

次のPL/SQLプログラムは、IMファスト・スタート機能を無効にします。

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE;

次の問合せは、IMファスト・スタート表領域のLOBが削除されたことを示しています(サンプル出力も示されています)。

COL OWNER FORMAT a5
COL SEGMENT_NAME FORMAT a20
SELECT   l.OWNER, l.SEGMENT_NAME, SUM(s.BYTES)/1024/1024 MB
FROM     DBA_LOBS l, DBA_SEGMENTS s
WHERE    l.SEGMENT_NAME = s.SEGMENT_NAME
AND      l.TABLESPACE_NAME = 'FS_TBS'
GROUP BY l.OWNER, l.SEGMENT_NAME;

no rows selected

85.4.4 FASTSTART_ENABLEプロシージャ

このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)を有効にし、IMファスト・スタート(ファスト・スタート)領域の表領域を指定します。

構文

DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE( 
   tbs_name    IN    VARCHAR2,
   nologging   IN    BOOLEAN DEFAULT TRUE);

パラメータ

表85-2 FASTSTART_ENABLEプロシージャのパラメータ

パラメータ 説明

tbs_name

ファスト・スタート領域のASSM表領域の名前。

nologging

ファスト・スタート領域に対して作成されたLOBのロギング・モード。

nologgingパラメータがFALSEに設定されている場合、データベースではLOGGINGオプションを使用してファスト・スタートLOBを作成します。TRUEに設定されている場合は(デフォルト)、NOLOGGINGオプションを使用してLOBを作成します。

セキュリティ・モデル

このプロシージャを実行するには、管理者権限が必要です。

使用上のノート

IMファスト・スタートを有効にするには、FASTSTART_ENABLEで指定されたASSM表領域が存在し、SYSAUX表領域がオンラインになっている必要があります。個々のPDBまたは非CDBについて存在するファスト・スタート表領域は1つだけです。指定された表領域にはIM列ストアのデータを格納するための十分な領域があり、ファスト・スタート領域として指定される前に他のデータはまったく含まれていないことが必要です。表領域のサイズは、INMEMORY_SIZE初期化パラメータのサイズの2倍以上に設定することをお薦めします。

データベースでは、IM列ストアが移入されるまで、ディスク上にファスト・スタート領域が作成されません。移入後、列データがファスト・スタート領域に定期的に保存されます(トランザクション・ジャーナルなどのメタデータは保存されません)。これは、ディスク上でSYSDBIMFS_LOBSEG$セグメントとして表されます。データベースでは、SYSAUX表領域にファスト・スタート・メタデータを格納します。Oracle Real Application Clusters (Oracle RAC)環境では、すべてのノード間でIMファスト・スタート・データが共有されます。

ノート:

IMファスト・スタートは、スタンバイ・データベース・インスタンスではサポートされていません。

メモリー内へのIMCUの初期ローディングが高コストでCPUバウンドである一方、IM FastStart表領域では断続的なI/Oが求められます。データベースは、列データを定期的にIMファスト・スタート領域に書き込みます。データベース・インスタンスを再起動する必要がある場合、Oracle DatabaseではIMCUを最初から再構築するのではなく、IMファスト・スタート領域から直接列データを読み取ります。列データの圧縮およびフォーマットは不要です。

この例では、fs_tbsをASSM表領域として作成してから、FASTSTART_ENABLEを使用してこの表領域をIMファスト・スタート領域として指定します。

CREATE TABLESPACE fs_tbs 
  DATAFILE 'fs_tbs.dbf' SIZE 500M 
  EXTENT MANAGEMENT LOCAL 
  SEGMENT SPACE MANAGEMENT AUTO;

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE('fs_tbs');

次の問合せは、IMファスト・スタートLOBが作成されたことを示しています(サンプル出力も示されています)。

COL OWNER FORMAT a5
COL SEGMENT_NAME FORMAT a20
SELECT   l.OWNER, l.SEGMENT_NAME, SUM(s.BYTES)/1024/1024 MB
FROM     DBA_LOBS l, DBA_SEGMENTS s
WHERE    l.SEGMENT_NAME = s.SEGMENT_NAME
AND      l.TABLESPACE_NAME = 'FS_TBS'
GROUP BY l.OWNER, l.SEGMENT_NAME;

OWNER SEGMENT_NAME         MB
----- -------------------- ----------
SYS   SYSDBIMFS_LOBSEG$    .125

85.4.5 FASTSTART_MIGRATE_STORAGEプロシージャ

このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)データを現在の表領域から新しい表領域に移動してカタログ化します。

構文

DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE( 
   tbs_name    IN    VARCHAR2 );

パラメータ

表85-3 FASTSTART_MIGRATE_STORAGEプロシージャのパラメータ

パラメータ 説明

tbs_name

IMファスト・スタート領域の新しいASSM表領域の名前。

セキュリティ・モデル

このプロシージャを実行するには、DBA権限が必要です。

使用上のノート

プロシージャを実行すると、データベースにより次のアクションが実行されます。

  1. すべてのIMファスト・スタート操作が完了するまで待機します。

  2. IMファスト・スタート機能を無効にします。

  3. IMファスト・スタートのデータおよびメタデータを新しい表領域にコピーし、古い表領域はそのままにします。

  4. IMファスト・スタート機能を再度有効にします。

次のプログラムは、IMファスト・スタート表領域が存在する場合はその名前を取得し、結果を出力します(サンプル出力も示されています)。

VARIABLE b_fstbs VARCHAR2(20)
BEGIN
   :b_fstbs := DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE;
END;
/
PRINT b_fstbs

B_FSTBS
-----------------------------
FS_TBS

次の文は、fs_tbs2という名前の新しい表領域を作成し、その表領域にIMファスト・スタート領域を移行します。

CREATE TABLESPACE fs_tbs2 
  DATAFILE 'fs_tbs2.dbf' SIZE 500M
  EXTENT MANAGEMENT LOCAL 
  SEGMENT SPACE MANAGEMENT AUTO;

EXEC DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE('fs_tbs2');

次のプログラムは、現在のIMファスト・スタート表領域の名前を出力します(サンプル出力も示されています)。

BEGIN
   :b_fstbs := DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE;
END;
/
PRINT b_fstbs

B_FSTBS
-----------------------------
FS_TBS2

85.4.6 GET_FASTSTART_TABLESPACEファンクション

このファンクションは、インメモリー・ファスト・スタート(IMファスト・スタート)に割り当てられた表領域を戻します。機能が無効な場合、ファンクションはNOT ENABLEDを戻します。

構文

DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE();

セキュリティ・モデル

このファンクションを実行するには、DBA権限が必要です。

このプログラムは、IMファスト・スタート表領域が存在する場合はその名前を取得し、結果を出力します。

VARIABLE b_fstbs VARCHAR2(20)
BEGIN
   :b_fstbs := DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE;
END;
/
PRINT b_fstbs

B_FSTBS
-----------------------------
NOT ENABLED

85.4.7 IME_CAPTURE_EXPRESSIONSプロシージャ

このプロシージャは、指定された時間間隔でデータベース内の最も頻繁にアクセスされている(最もホットな)式を20個取得します。

構文

DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS(
   snapshot    IN    VARCHAR2);

パラメータ

表85-4 IME_CAPTURE_EXPRESSIONSプロシージャのパラメータ

パラメータ 説明

snapshot

式統計が考慮される時間間隔を定義するスナップショットを指定します。

次に示すいずれかの値を指定できます。

  • CUMULATIVE

    データベースでは、データベース作成以降のすべての式統計が考慮されます。

  • CURRENT

    データベースでは、過去24時間の式統計のみが考慮されます。

  • WINDOW

    データベースでは、最新の式取得ウィンドウで追跡された式統計が考慮されます。

    データベースにより、最新のウィンドウで追跡された式に対する非表示の仮想列が追加されます。取得ウィンドウが現在オープンしている場合、データベースでは、現在のウィンドウでこの時点までに追跡されたすべての式が考慮され、最もホットな式が実体化されます。現在のウィンドウで追跡されている式をリストするには、DBA_EXPRESSION_STATISTICSSNAPSHOT='WINDOW'を指定して問い合せます。

使用上のノート

このプロシージャを起動すると、データベースでは式統計ストア(ESS)を問い合せて、少なくとも一部がIM列ストアに移入されている表の式のみを考慮します。データベースにより、最もホットな20個の式がそれぞれの表に、文字列SYS_IMEという接頭辞が付いた非表示の仮想列として追加され、デフォルトのINMEMORY列圧縮句が適用されます。前の呼出し時に追加されたSYS_IME列が、最新の上位20件のリスト内になくなると、データベースにより、それらがNO INMEMORYとしてマークされます。

ノート:

スタンバイ・データベースでIME_CAPTURE_EXPRESSIONSプロシージャを実行しても効果はありません。

属性がINMEMORYNO INMEMORYかに関係なく、表のSYS_IME列の最大数は50個です。表の上限に達すると、データベースにより、新しいSYS_IME列は追加されなくなります。新しい式のために領域を空けるには、IME_DROP_ALL_EXPRESSIONSプロシージャまたはIME_DROP_EXPRESSIONSプロシージャを使用して、SYS_IME列を手動で削除する必要があります。

各表に対する50個の式の制限(INMEMORYおよびNO INMEMORY式の両方を含む)は、データベースに対する20個の式の制限(INMEMORY式のみを含む)とは異なります。たとえば、IM列ストアに20個の表が移入された場合、各表に、INMEMORY属性を持つ1つのSYS_IME列と、NO INMEMORY属性を持つ49個のSYS_IME列が含まれている可能性があります。

IM式および仮想列は、インメモリー式単位(IMEU)と呼ばれるインメモリー構造に格納されます。すべてのIMEUは、圧縮特性の継承元である親インメモリー圧縮ユニット(IMCU)にリンクされています。

ESS情報は、データ・ディクショナリに格納され、DBA_EXPRESSION_STATISTICSビューで公開されます。このビューには、オプティマイザがESSで収集したメタデータが表示されます。IM式は、SYS_IMEという文字列で接頭辞が付けられ、DBA_IM_EXPRESSIONSビューで、システム生成の仮想列として公開されます。

例85-3 ユーザー定義ウィンドウでの式の取得

この例では、WINDOW取得モードの使用方法を示しています。式取得ウィンドウをオープンしたりクローズして、このウィンドウ内でデータベースが追跡したすべての式を取得します。次のステップを実行します。

  1. 式取得ウィンドウをオープンし、式を生成して、ウィンドウをクローズします。

    EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();
    -- Generate expressions for the database to track
    EXEC DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();
    
  2. DBA_EXPRESSION_STATICSを問い合せます(出力例も示します)。

    COL OWNER FORMAT A6
    COL TABLE_NAME FORMAT A9
    COL COUNT FORMAT 99999
    COL CREATED FORMAT A10
    COL EXPRESSION_TEXT FORMAT A29
    
    SELECT OWNER, TABLE_NAME, EVALUATION_COUNT AS COUNT, 
           CREATED, EXPRESSION_TEXT 
    FROM   DBA_EXPRESSION_STATISTICS 
    WHERE  SNAPSHOT = 'WINDOW'
    AND    OWNER = 'SH';
    
    OWNER  TABLE_NAM  COUNT CREATED    EXPRESSION_TEXT
    ------ --------- ------ ---------- -------------------------
    SH     SALES       4702 09-OCT-17  "QUANTITY_SOLD"
    SH     SALES       4702 09-OCT-17  "QUANTITY_SOLD"*"AMOUNT_SOLD"
    SH     SALES       4702 09-OCT-17  "PROD_ID"
    SH     SALES       4702 09-OCT-17  "CUST_ID"
    SH     SALES       4702 09-OCT-17  "CHANNEL_ID"
    SH     SALES       4702 09-OCT-17  "AMOUNT_SOLD"
    

    前述の問合せにより、ESSで追跡された列と、shスキーマでこの問合せのウィンドウ内で取得された式の両方が表示されます。最新のウィンドウで、データベースは1つの式QUANTITY_SOLD*AMOUNT_SOLDを取得しました。

  3. IME_CAPTURE_EXPRESSIONSを使用して、データベースが現在のウィンドウのすべての式を考慮して実体化するようにします。

    EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('WINDOW');
  4. DBA_IM_EXPRESSIONSを問い合せます(出力例も示します)。

    COL OWNER FORMAT a6
    COL TABLE_NAME FORMAT a9
    COL COLUMN_NAME FORMAT a25
    SET LONG 50
    SET LINESIZE 150
    
    SELECT OWNER, TABLE_NAME, COLUMN_NAME, SQL_EXPRESSION
    FROM   DBA_IM_EXPRESSIONS;
    
    OWNER  TABLE_NAM COLUMN_NAME               SQL_EXPRESSION
    ------ --------- ------------------------- -----------------------------
    SH     SALES     SYS_IME000100000025201B   "QUANTITY_SOLD"*"AMOUNT_SOLD"
    

    前述の出力は、表に追加され、IME_CAPTURE_EXPRESSIONSの最後の呼出しとしてINMEMORYというマークが付けられたすべての仮想列を示しています。データベースでは、表の各IMCUが再移入されときに、取得された式がIM列ストアに段階的に移入されます。

  5. 次のプロシージャを実行して、取得されたすべてのIM式の移入を明示的に強制します。

    EXEC DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS();

    特定の表からIM式を移入するには、DBMS_INMEMORY.REPOPULATEプロシージャのforceパラメータをTRUEに設定して実行します。

例85-4 過去の式の取得

次のプログラムは、過去24時間に追跡された式を取得します。

EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('CURRENT');

85.4.8 IME_CLOSE_CAPTURE_WINDOWプロシージャ

このプロシージャは、現在の式取得ウィンドウの終了を示します。

構文

DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();

使用上のノート

このプロシージャの呼出し時に、オプティマイザは収集されたすべての統計をディスクに保存し、そのウィンドウで追跡される式を制限します。データベースでは、このウィンドウで取得された統計が保持され、新しい式取得ウィンドウがオープンすると、前のウィンドウで取得された統計がパージされます。

例85-5 例

この例では、式取得ウィンドウをオープンし、IME_CAPTURE_EXPRESSIONS('WINDOW')を発行して、データベースで現在のウィンドウのすべての式が考慮され、実体化されるようにします。最後に、この例では、ウィンドウをクローズします。

EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();
-- Generate expressions so that the database can track them
EXEC DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();
EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('WINDOW');

85.4.9 IME_DROP_ALL_EXPRESSIONSプロシージャ

このプロシージャは、データベース内のSYS_IME式仮想列をすべて削除します。

構文

DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS();

使用上のノート

IME_DROP_ALL_EXPRESSIONSプロシージャは、INMEMORY属性の有無に関係なく、すべての表からすべてのSYS_IME列を削除します。事実上、このプロシージャは、データベース規模のリセット・ボタンの役割を果たします。

IME_DROP_ALL_EXPRESSIONSを使用すると、SYS_IME列があるセグメントのすべてのIMEUおよびIMCUの削除がトリガーされます。たとえば、移入された50個の表にそれぞれ1つのSYS_IME列がある場合は、IME_DROP_ALL_EXPRESSIONSによって、IM列ストアから50個すべての表が削除されます。これらのセグメントを再度移入するには、DBMS_INMEMORY.POPULATEプロシージャを使用するか、表の全体スキャンを実行する必要があります。

85.4.10 IME_GET_CAPTURE_STATEプロシージャ

このプロシージャは、式取得ウィンドウの現在の取得状態および最後に加えられた変更のタイムスタンプを戻します。

構文

DBMS_INMEMORY_ADMIN.IME_GET_CAPTURE_STATE(
   p_capture_state  OUT  VARCHAR2,
   p_last_modified  OUT  TIMESTAMP);

パラメータ

パラメータ 説明
p_capture_state

式取得ウィンドウの現在の状態を示します。

状態の種類は次のとおりです:

  • OPEN - ウィンドウがオープンしていることを示します。

  • CLOSED - ウィンドウがクローズしていることを示します。

  • DEFAULT - ウィンドウが使用されていないことを示します。これは、CLOSED状態と同じです。

p_last_modified

最後のアクションのタイムスタンプを示します。

使用上のノート

このプロシージャは、IME_OPEN_CAPTURE_WINDOWプロシージャIME_CLOSE_CAPTURE_WINDOWプロシージャのコールが競合するのを回避する場合に役立ちます。たとえば、現在、式取得ウィンドウの状態がOPENの場合は、別のウィンドウを開くことができず、ウィンドウの状態がCLOSEDの場合は、ウィンドウをクローズできません。

例85-6 式取得ウィンドウの状態の決定

この例では、式取得ウィンドウをオープンし、その取得状態を決定します。

EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();

VARIABLE b_state VARCHAR2(25)
VARIABLE b_time  VARCHAR2(10)
EXECUTE DBMS_INMEMORY_ADMIN.IME_GET_CAPTURE_STATE(:b_state, :b_time)
PRINT b_state b_time

次のサンプル出力は、式取得ウィンドウが現在オープンしていることを示しています。

B_STATE
--------------------------------------------------
OPEN

B_TIME
--------------------------------------------------
09-OCT-17

85.4.11 IME_OPEN_CAPTURE_WINDOWプロシージャ

このプロシージャは、式取得ウィンドウの開始を示します。

構文

DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();

セキュリティ・モデル

このプロシージャを実行するには、管理者権限が必要です。

使用上のノート

このプロシージャの呼出し時に、オプティマイザは、新しいウィンドウのスナップショットを開始して、このウィンドウ内で発生する式の追跡を開始します。式取得ウィンドウは、Oracle RACデータベースのすべてのインスタンスでグローバルです。

競合するアクションは許可されません。たとえば、Oracle RACデータベースで、時間t0にインスタンス1で式取得ウィンドウをオープンし、このウィンドウをクローズする前に、時間t1にインスタンス2で別の式取得ウィンドウをオープンしようとすると、アクションが競合します。現在の取得状態を取得し、プロシージャの呼出しが競合する可能性を減らすには、IME_GET_CAPTURE_STATEプロシージャを使用します。

次のプログラムは、式取得ウィンドウをオープンします。

EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW();

85.4.12 IME_POPULATE_EXPRESSIONSプロシージャ

このプロシージャは、最後に起動されたDBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONSで取得された式を強制的に移入します。

構文

DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS();

使用上のノート

このプロシージャを起動しない場合、データベースでは、SYS_IME列の親IMCUが再移入されたときに、これらの列を段階的に再移入します。表が再移入されない場合、IME_CAPTURE_EXPRESSIONSプロシージャによって取得された新しいSYS_IME列は移入されません。IME_POPULATE_EXPRESSIONSは、移入を強制的に実行することで、この問題を解決します。

プロシージャは、内部的に、INMEMORY属性を持つSYS_IME列を含むすべての表に対して、DBMS_INMEMORY.REPOPULATEを起動します。指定された表サブセット内のSYS_IME列を移入するには、IME_POPULATE_EXPRESSIONSではなくDBMS_INMEMORY.REPOPULATEを使用します。