89 DBMS_INMEMORY_ADMIN
DBMS_INMEMORY_ADMINは、インメモリー・ファスト・スタート(IMファスト・スタート)領域およびインメモリー式(IM式)を管理するためのインタフェースを提供します。
89.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_PARAMETERにAIM_STATWINDOW_DAYSパラメータを指定します。
参照:
自動インメモリーの詳細は、Oracle Database In-Memoryガイドを参照してください
移入時のデータベース・インメモリーの待機
POPULATE_WAIT関数は、優先度が指定された優先度以上のすべてのINMEMORYオブジェクトの移入を開始し、移入のステータス値を返します。ユーザー指定の間隔では、コール元に値を戻すまでにファンクションが待機する最大時間を指定します。
参照:
移入機能での待機の詳細は、Oracle Database In-Memoryガイドを参照してください
89.3 DBMS_INMEMORY_ADMINの操作上のノート
DBMS_INMEMORY_ADMINファスト・スタート操作は、失敗するまたは中断される場合があります。
失敗または中断シナリオでは、次のルールによって使用できるサブプログラムが決定されます。
-
FASTSTART_ENABLEが成功しなかった場合、許可される操作はFASTSTART_ENABLEの再実行のみです。 -
FASTSTART_MIGRATE_STORAGEが成功しなかった場合、許可される操作はFASTSTART_MIGRATE_STORAGEの再実行のみです。 -
FASTSTART_DISABLEが成功しなかった場合は、すべてのDBMS_INMEMORY_ADMIN操作が許可されます。
89.4 DBMS_INMEMORY_ADMINサブプログラムの要約
この表は、DBMS_INMEMORY_ADMINサブプログラムを示し、簡単に説明しています。
表89-1 DBMS_INMEMORY_ADMINパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
このプロシージャは、自動インメモリーを制御するパラメータの現在の値を取得します。 |
|
|
このプロシージャは、自動インメモリーの実行環境をカスタマイズします |
|
|
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)機能を無効にします。 |
|
|
このプロシージャは、IMファスト・スタートを有効にし、表領域を割り当てます。 |
|
|
このプロシージャは、すべてのIMファスト・スタート・データおよびメタデータを既存の表領域から指定された新しい表領域に移動します。 |
|
|
このファンクションは、現在IMファスト・スタートに指定されている表領域の名前を戻します。 |
|
|
このプロシージャは、指定された時間間隔でデータベース内の最も頻繁にアクセスされている(最もホットな)式を20個取得します。 |
|
|
このプロシージャは、現在の式取得ウィンドウの終了を示します。 |
|
|
このプロシージャは、データベース内の |
|
|
このプロシージャは、式取得ウィンドウの現在の取得状態および最後に加えられた変更のタイムスタンプを戻します。 |
|
|
このプロシージャは、式取得ウィンドウの開始を示します。 |
|
|
このプロシージャは、最後に起動された |
|
|
指定した優先度よりも高い優先度のすべての |
89.4.1 AIM_GET_PARAMETERプロシージャ
構文
DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER(
parameter IN NUMBER,
value OUT NUMBER);パラメータ
| パラメータ | 説明 |
|---|---|
parameter |
自動インメモリーを制御する事前定義された定数を指定します。 有効な定数は、スライディング統計情報ウィンドウで日数を指定する |
value |
|
例89-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ガイド』を参照してください
89.4.2 AIM_SET_PARAMETERプロシージャ
構文
DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER(
parameter IN NUMBER,
value IN NUMBER);パラメータ
| パラメータ | 説明 |
|---|---|
parameter |
自動インメモリーを制御する事前定義された定数を指定します。 有効な定数は、スライディング統計情報ウィンドウで日数を指定する |
value |
|
例89-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
----------
1
B_STATWIN
----------
14参照:
AIM_GET_PARAMETERの使用方法については『Oracle Database In-Memoryガイド』を参照してください
89.4.3 FASTSTART_DISABLEプロシージャ
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)機能を無効にします。
構文
DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE();
セキュリティ・モデル
このプロシージャを実行するには、管理者権限が必要です。
使用上のノート
プロシージャを実行すると、データベースにより次のアクションが実行されます。
-
すべてのIMファスト・スタート操作が完了するまで待機します。
-
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 selected89.4.4 FASTSTART_ENABLEプロシージャ
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)を有効にし、IMファスト・スタート(ファスト・スタート)領域の表領域を指定します。
構文
ノート:
マルチテナント・コンテナ・データベースは、Oracle Database 20cで唯一サポートされるアーキテクチャです。ドキュメントが改訂されている間は、従来の用語が残っている可能性があります。ほとんどの場合、"データベース"と"非CDB"は、文脈に応じてCDBまたはPDBを指しています。アップグレードなどでは、"非CDB"が以前のリリースの非CDBを指している場合もあります。
DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE(
tbs_name IN VARCHAR2,
nologging IN BOOLEAN DEFAULT TRUE);
パラメータ
表89-2 FASTSTART_ENABLEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ファスト・スタート領域のASSM表領域の名前。 |
|
|
ファスト・スタート領域に対して作成された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
89.4.5 FASTSTART_MIGRATE_STORAGEプロシージャ
このプロシージャは、インメモリー・ファスト・スタート(IMファスト・スタート)データを現在の表領域から新しい表領域に移動してカタログ化します。
構文
DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE(
tbs_name IN VARCHAR2 );
パラメータ
表89-3 FASTSTART_MIGRATE_STORAGEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
IMファスト・スタート領域の新しいASSM表領域の名前。 |
セキュリティ・モデル
このプロシージャを実行するには、DBA権限が必要です。
使用上のノート
プロシージャを実行すると、データベースにより次のアクションが実行されます。
-
すべてのIMファスト・スタート操作が完了するまで待機します。
-
IMファスト・スタート機能を無効にします。
-
IMファスト・スタートのデータおよびメタデータを新しい表領域にコピーし、古い表領域はそのままにします。
-
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
89.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
89.4.7 IME_CAPTURE_EXPRESSIONSプロシージャ
このプロシージャは、指定された時間間隔でデータベース内の最も頻繁にアクセスされている(最もホットな)式を20個取得します。
構文
DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS(
snapshot IN VARCHAR2);パラメータ
表89-4 IME_CAPTURE_EXPRESSIONSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
式統計が考慮される時間間隔を定義するスナップショットを指定します。 次に示すいずれかの値を指定できます。
|
使用上のノート
このプロシージャを起動すると、データベースでは式統計ストア(ESS)を問い合せて、少なくとも一部がIM列ストアに移入されている表の式のみを考慮します。データベースにより、最もホットな20個の式がそれぞれの表に、文字列SYS_IMEという接頭辞が付いた非表示の仮想列として追加され、デフォルトのINMEMORY列圧縮句が適用されます。前の呼出し時に追加されたSYS_IME列が、最新の上位20件のリスト内になくなると、データベースにより、それらがNO INMEMORYとしてマークされます。
ノート:
スタンバイ・データベースでIME_CAPTURE_EXPRESSIONSプロシージャを実行しても効果はありません。
属性がINMEMORYかNO 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ビューで、システム生成の仮想列として公開されます。
例89-3 ユーザー定義ウィンドウでの式の取得
この例では、WINDOW取得モードの使用方法を示しています。式取得ウィンドウをオープンしたりクローズして、このウィンドウ内でデータベースが追跡したすべての式を取得します。次のステップを実行します。
-
式取得ウィンドウをオープンし、式を生成して、ウィンドウをクローズします。
EXEC DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW(); -- Generate expressions for the database to track EXEC DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW(); -
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を取得しました。 -
IME_CAPTURE_EXPRESSIONSを使用して、データベースが現在のウィンドウのすべての式を考慮して実体化するようにします。EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('WINDOW'); -
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列ストアに段階的に移入されます。 -
次のプロシージャを実行して、取得されたすべてのIM式の移入を明示的に強制します。
EXEC DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS();特定の表からIM式を移入するには、
DBMS_INMEMORY.REPOPULATEプロシージャのforceパラメータをTRUEに設定して実行します。
例89-4 過去の式の取得
次のプログラムは、過去24時間に追跡された式を取得します。
EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('CURRENT');89.4.8 IME_CLOSE_CAPTURE_WINDOWプロシージャ
このプロシージャは、現在の式取得ウィンドウの終了を示します。
構文
DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW();使用上のノート
このプロシージャの呼出し時に、オプティマイザは収集されたすべての統計をディスクに保存し、そのウィンドウで追跡される式を制限します。データベースでは、このウィンドウで取得された統計が保持され、新しい式取得ウィンドウがオープンすると、前のウィンドウで取得された統計がパージされます。
例89-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');
89.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プロシージャを使用するか、表の全体スキャンを実行する必要があります。
89.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 |
式取得ウィンドウの現在の状態を示します。 状態の種類は次のとおりです:
|
p_last_modified |
最後のアクションのタイムスタンプを示します。 |
使用上のノート
このプロシージャは、IME_OPEN_CAPTURE_WINDOWプロシージャとIME_CLOSE_CAPTURE_WINDOWプロシージャのコールが競合するのを回避する場合に役立ちます。たとえば、現在、式取得ウィンドウの状態がOPENの場合は、別のウィンドウを開くことができず、ウィンドウの状態がCLOSEDの場合は、ウィンドウをクローズできません。
例89-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-1789.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();
89.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を使用します。
89.4.13 POPULATE_WAITファンクション
このファンクションは、指定した優先度よりも優先度が高いすべてのINMEMORYオブジェクトの移入を開始して、その移入に関するステータス値を返します。ユーザー指定の間隔は、値がコール元に戻されるまで関数が待機する最大時間を指定します。
構文
DBMS_INMEMORY_ADMIN.POPULATE_WAIT(
priority IN VARCHAR2 DEFAULT 'LOW',
percentage IN NUMBER DEFAULT 100,
timeout IN NUMBER DEFAULT 99999999,
force IN VARCHAR2 DEFAULT FALSE)
RETURN VARCHAR2;パラメータ
表89-5 POPULATE_WAITファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
指定した優先度設定以上のすべての
|
|
|
このファンクションが移入完了とみなすために必要な移入の割合を指定します。デフォルトは、 たとえば、 |
|
|
このファンクションが移入操作のタイムアウトを示す
|
|
|
優先度が指定した優先度以上の パーティション化された |
戻り値
次の表では、POPULATE_WAITの戻り値について説明します。このファンクションは、timeoutで指定した間隔が終了する前に条件が満たされた場合にのみ、値0、1、2および3を返します。timeoutが600の場合、このファンクションは、600秒経過する前にメモリー不足エラーが発生したときにのみ1を返します。このファンクションは、データベースがリクエストされた操作を完了する前に、タイムアウト間隔が終了になった場合にのみ-1を返します。
表89-6 POPULATE_WAITの戻り値
| 定数 | 値 | 説明 |
|---|---|---|
|
|
|
移入完了の待機中に、ファンクションがタイムアウトになりました。 現在の移入ジョブは、 |
|
|
|
|
|
|
|
インメモリー・プールのメモリーが不足していて、指定した完了の |
|
|
|
指定した |
|
|
|
インメモリー列ストアが有効になっていません。 |
使用上のノート
オブジェクトが確実に移入されるようにする使用例を次に示します。
-
データベースがクローズされたときに、管理者のみがデータベースにアクセスするように
STARTUP RESTRICTを指定してデータベースをオープンし、適切なタイムアウトを設定してPOPULATE_WAITを実行します。POPULATE_WAITが、タイムアウトを示す-1を返した場合は、POPULATE_WAITを再実行します。このファンクションが0を返したときには、制限付きセッションを無効にして、非管理ユーザーがデータベースの問合せを実行できるようにします。 -
サービスまたはアプリケーション層の手法を使用して、データベース接続をブロックします。分析索引が存在しない場合に、適切なパフォーマンスを実現するためにアプリケーションがIM列ストアに依存しているときには、このような手法によってランナウェイ問合せを防止します。
例89-7 インメモリー移入のタイムアウト間隔の指定
この例では、データベースに複数のインメモリー表が格納されていて、それらの表には異なる優先度が設定されています。ここでの目標は、制限付きデータベース・セッションですべてのインメモリー表への移入を100%完了し、その後で制限付きセッションを無効にすることで、アプリケーションが確実にインメモリー表現のみの問合せを実行できるようにすることです。
データベースは停止されているとします。SQL*Plusで、SYSDBAとしてアイドル状態のインスタンスに接続し、次のコマンドを実行します(出力例も示します)。
SQL> STARTUP RESTRICT
ORACLE instance started.
Total System Global Area 1157624280 bytes
Fixed Size 8839640 bytes
Variable Size 754974720 bytes
Database Buffers 16777216 bytes
Redo Buffers 7933952 bytes
In-Memory Area 369098752 bytes
Database mounted.
Database opened.
データベースはオープンしますが、アクセスできるのは管理ユーザーのみです。SQL*Plusで、次の文を実行します(サンプル出力は太字で示されています)。
VARIABLE b_pop_status NUMBER
SELECT DBMS_INMEMORY_ADMIN.POPULATE_WAIT(
priority => 'NONE' ,
percentage => 100 ,
timeout => 300 )
INTO b_pop_status
FROM DUAL;
PRINT b_pop_status
-15分後、このファンクションは数値–1を返します。このコードは、移入の完了を待機している間にファンクションがタイムアウトになったことを示します。すべてのINMEMORY表に移入するには、5分間では不十分です。30分のタイムアウトを指定して、SELECT文を再実行します。
SELECT DBMS_INMEMORY_ADMIN.POPULATE_WAIT(
priority => 'NONE' ,
percentage => 100 ,
timeout => 1800 )
INTO b_pop_status
FROM DUAL;
PRINT b_pop_status
08分後に、このファンクションは数値0を返します。このコードは、すべての表が完全に移入されたことを示します。この時点で制限付きセッションを無効にします。これにより、アプリケーションはインメモリー表現のみで確実にアクセスできる状態でインメモリー・オブジェクトの問合せを開始できるようになります。
ALTER SYSTEM DISABLE RESTRICTED SESSION;