7.2 KEEPバッファ・プール

KEEPバッファ・プールを使用すると、頻繁にアクセスされる表をバッファ・プールに永続的に保持できます。

7.2.1 True CacheでのKEEPバッファ・プールの使用の概要

異なるTrue CacheのKEEPバッファ・プールに異なるオブジェクトを割り当てることができます。

これは、大まかには次のステップから成ります。

  1. True CacheでDB_KEEP_CACHE_SIZEを構成します。
  2. True CacheのオブジェクトをKEEPバッファ・プールに割り当てます。

プライマリ・データベースと同様に、オブジェクトがTrue CacheのKEEPバッファ・プールに割り当てられると、オブジェクトのブロックは問合せ用にロードされ、KEEPバッファ・プールに保持されます。新しいデータがプライマリ・データベースのオブジェクトに挿入されると、その新しいデータは、REDO適用メカニズムを介してTrue CacheのKEEPバッファ・プールに自動的に伝播されます。

ダイレクト・ロード・データをTrue Cacheに伝播するには、対応するDDLまたはDMLでLOGGING句を指定するか、対応するオブジェクト・プロパティをLOGGINGに変更します。LOGGING句を使用すると、特定の操作をREDOログ・ファイルに記録する(LOGGING)か記録しない(NOLOGGING)かを指定できます。

7.2.1.1 サポートされるオブジェクト

KEEPメカニズムでは、物理データ・セグメントを持つオブジェクトのみが追跡されます。

オブジェクトを追跡できるかどうかを確認するには、DBA_OBJECTSビューにDATA_OBJECT_IDがあることを確認します。

関連トピック

7.2.1.2 プライマリ・データベース・バッファ・キャッシュでのTrue Cacheの動作

デフォルトでは、プライマリ・データベースでKEEPとマークすると、True CacheでもKEEPとマークされます。

プライマリ・データベース上のKEEPオブジェクトのみを対象とするオブジェクトがTrue Cache KEEPバッファ・プールを満たさないようにするには、DBMS_CACHEUTIL.TRUE_CACHE_KEEPプロシージャを使用して、True CacheでオブジェクトをKEEPとしてマークします。DBMS_CACHEUTIL.TRUE_CACHE_KEEPは、プライマリ・データベースでKEEPとマークされているオブジェクトを優先してオーバーライドします。

また、次の点も考慮してください:

  • ALTER TABLEはDDLであるため、プライマリ・データベースでのALTER TABLE KEEP割当ては永続的です。DBMS_CACHEUTIL.TRUE_CACHE_KEEPプロシージャは、True Cacheの再起動時に永続的ではありません。
  • DBMS_CACHEUTIL.TRUE_CACHE_UNKEEPプロシージャを使用して、プライマリALTER TABLE KEEP割当てを保持解除することはできません。かわりに、True CacheでDB_KEEP_CACHE_SIZEを構成しないか、True CacheでDBMS_CACHEUTIL.TRUE_CACHE_KEEPを使用して別のオブジェクトを割り当てます。
  • True Cacheのすべてのスキャンでは、True Cacheにローカルな一時表を除き、ダイレクト(NOCACHE)パスのかわりにCACHEパスが使用されます。

7.2.2 True CacheでのDB_KEEP_CACHE_SIZEの構成

True CacheでKEEPバッファ・プールを構成するには、DB_KEEP_CACHE_SIZE初期化パラメータを大きいサイズ(10GBなど)に設定します。

例:

ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=size SCOPE=BOTH;

7.2.3 True CacheのKEEPバッファ・プールへのオブジェクトの割当て

KEEPバッファ・プールを構成した後、True CacheのKEEPバッファ・プールにオブジェクトを割り当てます。

これを行うには、True CacheでDBMS_CACHEUTIL.TRUE_CACHE_KEEP()プロシージャをコールします。

例: 非パーティション・オブジェクト

EXECUTE DBMS_CACHEUTIL.TRUE_CACHE_KEEP('SYS', 'TABLE1');

例: パーティション・オブジェクトのパーティション

EXECUTE DBMS_CACHEUTIL.TRUE_CACHE_KEEP('SYS', 'TABLE2', 'TABLE2_PART1');

7.2.3.1 TRUE_CACHE_KEEPプロシージャ

True Cacheでこのプロシージャをコールすると、そのキャッシュのKEEPバッファ・プールにオブジェクトが割り当てられます。

このプロシージャを使用するには、True CacheでDB_KEEP_CACHE_SIZE初期化パラメータを構成する必要があります。

構文

DBMS_CACHEUTIL.TRUE_CACHE_KEEP(
   schema                 IN VARCHAR2,
   obj                    IN VARCHAR2,
   partition              IN VARCHAR2 := NULL);

パラメータ

表7-1 TRUE_CACHE_KEEPプロシージャのパラメータ

パラメータ 説明
schema オブジェクトのスキーマの名前。
obj オブジェクトの名前。
partition
  • オブジェクトがパーティション化されていない場合、これはNULLです。
  • オブジェクトがパーティション化されている場合は、パーティション・セグメントの名前を使用します。
  • 複合パーティション・オブジェクトの場合は、サブパーティション・セグメントの名前を使用します。

7.2.4 True Cacheに対するオブジェクトのKEEPバッファ・プール割当ての解除

DBMS_CACHEUTIL.TRUE_CACHE_UNKEEP()を使用して、KEEPバッファ・プールからオブジェクトを削除できます。

ブロックはすぐには削除されないことに注意してください。かわりに、他のオブジェクトの新しいブロックがKEEPバッファ・プールに取り込まれると、時間の経過とともに自然に削除されます。また、True CacheでのKEEPバッファ・プール割当ては、True Cacheが稼働している間のみ記憶されます。

例: 非パーティション・オブジェクト

EXECUTE DBMS_CACHEUTIL.TRUE_CACHE_UNKEEP('SYS', 'TABLE1');

例: パーティション・オブジェクトのパーティション

EXECUTE DBMS_CACHEUTIL.TRUE_CACHE_UNKEEP('SYS', 'TABLE2', 'TABLE2_PART1');

7.2.4.1 TRUE_CACHE_UNKEEPプロシージャ

True CacheのオブジェクトがKEEPバッファ・プールに存在する必要がなくなった場合は、このプロシージャを使用してオブジェクトのKEEP割当てを解除します。

構文

DBMS_CACHEUTIL.TRUE_CACHE_UNKEEP(
   schema                 IN VARCHAR2,
   obj                    IN VARCHAR2,
   partition              IN VARCHAR2 := NULL);

パラメータ

表7-2 TRUE_CACHE_UNKEEPプロシージャのパラメータ

パラメータ 説明
schema オブジェクトのスキーマの名前。
obj オブジェクトの名前。
partition
  • オブジェクトがパーティション化されていない場合、これはNULLです。
  • オブジェクトがパーティション化されている場合は、パーティション・セグメントの名前を使用します。
  • 複合パーティション・オブジェクトの場合は、サブパーティション・セグメントの名前を使用します。

7.2.5 True CacheでのKEEPオブジェクトのリストの表示

V$TRUE_CACHE_KEEPビューを使用して、True CacheのKEEPバッファ・キャッシュに割り当てられているオブジェクトを確認します。

例1

SELECT * FROM v$true_cache_keep;

TS_NUMBER  DATA_OBJECT_ID  CON_ID
---------- --------------  ------
         5          72948       3
         5          72950       3

例2

SELECT owner as schema, object_name as keepobj, subobject_name as partition, o.data_object_id
FROM dba_objects o, sys_objects so, v$true_cache_keep vtck
WHERE o.data_object_id = so.object_id
  AND vtck.con_id = sys_context('USERENV', 'CON_ID')
  AND so.ts_number=vtck.ts_number
  AND o.data_object_id = vtck.data_object_id;

SCHEMA  KEEPOBJ  PARTITION     DATA_OBJECT_ID
------  -------  ------------  --------------
SYS     TABLE1                          72948
SYS     TABLE2   TABLE2_PART1           72950

7.2.5.1 V$TRUE_CACHE_KEEPの列

次の表に、V$TRUE_CACHE_KEEPビュー内の列の説明を示します。

説明
TS_NUMBER 表領域番号。
DATA_OBJECT_ID オブジェクトを含むセグメントのディクショナリ・オブジェクト番号。
CON_ID

データが関係するコンテナのID。可能な値は次のとおりです:

  • 1: この値は、ルートのみに関連するデータを含む行に使用される
  • n: nは、データを含む行に適用されるコンテナIDです。