7.2 KEEPバッファ・プール
KEEP
バッファ・プールを使用すると、頻繁にアクセスされる表をバッファ・プールに永続的に保持できます。
7.2.1 True CacheでのKEEPバッファ・プールの使用の概要
異なるTrue CacheのKEEP
バッファ・プールに異なるオブジェクトを割り当てることができます。
これは、大まかには次のステップから成ります。
- True Cacheで
DB_KEEP_CACHE_SIZE
を構成します。 - 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 |
|
関連トピック
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 |
|
関連トピック
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