※ 本記事は、Ilam Sivaによる”Pinning objects in Oracle True Cache : When and Why to use the KEEP pool“を翻訳したものです。

2025年3月6日


キャッシュの利用を効率化することは、高パフォーマンス・アプリケーションの基本です。ただし、手作業の介入なしに重要なデータをキャッシュに残しておくことは難しい場合があります。Oracle True Cacheは、KEEPプールの利用により、このニーズにシームレスに対応しています。

 

Oracle True Cacheの独自性とは?


True Cacheを初めて使用される読者向けに簡単に復習します – Oracle True Cacheは、Oracle Databaseのインメモリーで一貫性のある自動管理キャッシュです。True Cacheは、SQLキャッシュであり、データベースのキー値(オブジェクトまたはJSON)キャッシュでもあります。すべてのOracleデータベース・オブジェクトおよびタイプがキャッシュされます。True Cacheは、プライマリ・データベースの完全な読取り専用レプリカですが、ディスクレスである点が基本的に異なります。True Cacheの最も優れた機能の1つは、自動的に管理されることです。アプリケーション開発者はキャッシュ層のキャッシュを管理する必要がなくなり、キャッシュの一貫性やキャッシュ内のアイテムの有効期限について心配する必要がなくなります。これはすべて管理されており、アプリケーション開発者の活動を非常に楽にしてくれます! 

 

True CacheでのKEEPプールの役割

 

True Cacheは、Oracleデータベースの拡張バッファ・キャッシュと見なすことができ、別々のマシンに常駐して、キャッシュのスケールと容量を大幅に強化します。データベースのキャッシュのスケールと容量をまさに拡張できるのです。様々なデータ操作を行うため、Oracleデータベースは、バッファ・キャッシュを使用して、ディスクから読み取られたデータ・ブロックを格納します。True Cacheも似ていますが、より大きなスケールで動作します。バッファ・キャッシュの場合、KEEPプールを使用して、頻繁にアクセスされるセグメントをバッファ・キャッシュに保持できます。KEEPバッファ・プールの目的は、オブジェクトをメモリー内に保持することで、I/O操作を回避することです。

Pin frequently used information

 

同様に、True Cacheに対して、ホット・オブジェクト(頻繁にアクセスされるオブジェクト、またはI/O操作を回避するためにキャッシュ内に留めたいオブジェクト)を(できるだけ)削除しないように指定するために、True CacheのKEEPバッファ・プールにオブジェクトを割り当てることができます。(実際、複数のTrue Cacheがある場合、より高度な設定として、それぞれのTrue CacheのKEEPバッファ・プールごとに異なるオブジェクトを割り当てることができます)。

 

 

True CacheのKEEPプール

 

True CacheのKEEPプールにオブジェクトを割り当てると、頻繁にアクセスされるデータに対する効率的なキャッシングが可能になり、割当てから外される機会を最小限に抑えることでパフォーマンスが向上します。これにより、ホット・オブジェクトのキャッシュ・ヒット率が向上します。

 

data flow

  • True Cache向けにDB_KEEP_CACHE_SIZEを設定します。その前に、アプリケーションが必要とするオブジェクトに基づいて、おおよそのサイズを見積っておくのが良いでしょう。
  • その後、True CacheのオブジェクトをKEEPバッファ・プールに割り当てることができます。オブジェクトがTrue CacheのKEEPバッファ・プールに割り当てられると、オブジェクトのブロックは問合せ用にロードされ、KEEPバッファ・プールに保持されます。
  • 新しいデータがプライマリ・データベースのオブジェクトに挿入された時は、その新しいデータは、REDO適用メカニズムを介してTrue CacheのKEEPバッファ・プールに自動的に伝播されます。

 

1点注意すべき点は、プライマリ・データベースでKEEPをマークすると、True CacheでもKEEPとしてマークされることです。プライマリ・データベースのKEEPオブジェクトをTrue CacheのKEEPプールに設定するつもりがない場合、混乱の原因になります。

DBMS_CACHEUTIL.TRUE_CACHE_KEEPを使用することで解決できます! これが優先され、プライマリ・データベースで保持するようマークされたオブジェクトを上書きします。

 

たとえば、CUSTOMER_LOOKUP表をTrue CacheにKEEPするには、次のように実行します。

EXECUTE DBMS_CACHEUTIL.TRUE_CACHE_KEEP (‘SYS’, ‘CUSTOMER_LOOKUP’);

これにより、オブジェクトはキャッシュのKEEPバッファ・プールに割り当てられます。

 

DBMS_CACHEUTIL.TRUE_CACHE_UNKEEP()を使用して、KEEPバッファ・プールからオブジェクトを削除することもできます。ただし、ブロックはすぐには削除されません。かわりに、他のオブジェクトの新しいブロックがKEEPバッファ・プールに取り込まれると、自然にエージング・アウトされます。

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

 

まとめ

 

KEEPは、特定の表およびオブジェクトを固定して、ホット・データセットがキャッシュに保持されるようにする強力な機能であり、これにより、メモリーの制約や定期的なキャッシュの削除によって重要なデータが削除されるのを防ぐことができます。保持されるデータは、開発者の介入なしに自動的にリフレッシュされ、プライマリ・データベースでデータが更新されるたびにリアルタイムで一貫性が保たれます。この機能を使用すると、頻繁にアクセスされるデータをOracle True Cacheに保持する際に、効率とパフォーマンスがより向上します。

 

全体的に、Oracle True Cacheは、プライマリ・データベースからリソースを大量に消費する問合せ/読取りをオフロードすることで、パフォーマンスとスケーラビリティを向上させるのに役立ちます。これは、最も完全な機能を備えたSQLおよびオブジェクト・キャッシュです。キャッシュとプライマリ・データベースの間でデータを同期を維持するという負担を開発者にかけることなく、True Cacheのデータは、複数の表の間で常に一貫性と最新の状態を維持します。プライマリ・データベースのスキーマ変更も、自動的にキャッシュに反映されます。

キャッシング戦略を最適化する準備はできていますか? Live Labsを使用して、Oracle True Cacheの詳細を確認し比類のないパフォーマンスを今すぐ実現しましょう。

 

詳細情報のリソース:
True Cacheホーム: https://www.oracle.com/truecache

ユーザー・ガイド: True Cacheユーザー・ガイド

Live Labs: アクセス方法 Live Labs for True Cache
ビデオ: ビデオ・プレゼンテーション