この記事はIlam SivaによるMaintain Application Read Availability as a bonus from Oracle True Cache while boosting App Performance!を日本語に翻訳したものです。

2026年4月28日


Oracle True Cacheは、Oracle Database向けのインメモリで、一貫性のある、自動的に管理されるSQLおよびオブジェクト・キャッシュです。エンタープライズ環境におけるデータ・キャッシングの強力なソリューションを提供し、増大するデータ量やリアルタイム・アクセスの必要性によって生じる課題に効果的に対応します。アプリケーションのレスポンス時間を改善し、データベース・サーバーの負荷を軽減することで、重要なアプリケーションに対して信頼性の高い低レイテンシのデータ・アクセスを実現できます。True Cacheは、最新のエンタープライズ・システムの要求を満たすために、スケーラビリティとパフォーマンスをコア原則として設計されています。

True Cacheのメリット

Oracle True Cacheは、アプリケーション開発およびパフォーマンスに関連する複数のビジネス上のメリットを提供します。

  • プライマリ・データベースから問合せをオフロードすることで、スケーラビリティとパフォーマンスを向上させます。
  • True Cacheをアプリケーションの近くに配置することで、アプリケーションのレスポンス時間とネットワーク・レイテンシを削減します。これは特に、データ・レジデンシ要件によりデータベースがアプリケーションとは異なる場所にある場合に効果があります。
  • 複数のTrue Cacheにデータを分散することで、大規模なインメモリ・ストレージ領域を作成します。すべてのTrue Cacheにまたがるキャッシュ・データの合計サイズは、単一のプライマリ・データベースまたはキャッシュの場合よりもはるかに大きくできます。
  • キャッシュの内容を自動的に維持します。
  • アプリケーションに対して透過的であるため、開発とメンテナンスが簡素化されます。

プライマリ・データベースが停止した場合でも、True Cacheは読取り処理を継続できますか?

キャッシュについて考える場合、通常はパフォーマンスと低レイテンシが主な検討事項になります。Oracle True Cacheは、これらのメリットに加えて、プライマリ・データベースが使用できなくなるシナリオでも、アプリケーションの読取り可用性をサポートするように設計されています。

エンタープライズ環境では、計画停止か計画外停止かを問わず、データベース停止中もアプリケーションが機能し続けることが求められることがよくあります。True Cacheは、アプリケーションが以前にキャッシュされたデータへ引き続きアクセスできるようにすることで、このニーズに対応し、重要な読取り操作の継続性をサポートします。

この記事では、プライマリ・データベースが使用できない場合の読取り可用性に焦点を当てます。可用性に関するもうひとつの側面として、単一のプライマリ・データベースに対して複数のTrue Cacheノードをデプロイできる点があります。このような構成では、1つのキャッシュ・ノードが使用できなくなっても、他のノードがリクエストの処理を継続できます。このシナリオについては、別の記事で取り上げます。

True Cacheの通常運用(プライマリが稼働している場合)

まず、プライマリ・データベースが稼働している場合にTrue Cacheがどのように動作するかを見ていきましょう。

True Cache

アプリケーションは読取りクエリーを True Cacheに発行します。データ・ブロックがまだTrue Cache内にない場合、それらはプライマリ・データベースから自動的に取得され、True Cacheのメモリに格納された後、アプリケーションに提供されます。その以降、データ・ブロックはプライマリ・データベースと自動的に同期された状態に保たれます。これらはすべてTrue Cacheによって自動的に管理されるため、アプリケーションがキャッシュ内の古いデータを心配する必要はありません。また、True Cacheへのすべての読取りは一貫性があり、True Cacheはアプリケーションにデータを提供する際に、データの一貫性と整合性を管理します。

True Cacheのウォームアップ

キャッシュ・ヒットとは、システムがキャッシュ・メモリ(この場合はTrue Cache)からデータを正常に取得したときに発生します。そのためには、データがすでにキャッシュ内に存在している必要があり、その結果、高速にアクセスできます。これは望ましいシナリオであり、キャッシュのメリットを活用してアプリケーションのパフォーマンスを向上させることができます。また、クエリーをオフロードし、プライマリ・データベースへのリクエスト数を減らすことにも役立ちます。

True Cacheがリクエストを受け取り始めると、頻繁にアクセスされるデータでキャッシュが徐々に満たされ、キャッシュの効率が向上するにつれて、コールドからウォーム、最終的にはホットな状態へと移行します。

システムが実際のアプリケーション・トラフィックにさらされる前に、頻繁にアクセスされるデータを事前にキャッシュへロードしておくことは良い方法です。このキャッシュ・ウォーミングは、頻繁にアクセスされるコンテンツをキャッシュに事前ロードすることで、アプリケーションのパフォーマンスを最適化するために使用される概念です。これにより、データはTrue Cache内ですぐに利用可能となり、アプリケーションまたはユーザーに提供するまでの時間を短縮できます。その結果、より高速で効率的なユーザー・エクスペリエンスが実現します。

True Cacheはキャッシュ・ウォームアップの機能を提供しており、定常状態では、ワークロード特性に応じて、高いキャッシュ・ヒット率(たとえば99%以上)を目標とすることが一般的です。

プライマリ・データベースが使用できなくなるとどうなりますか?

True Cache when primary down

簡単に言えば、True Cacheはアプリケーションに対する読取りの提供を継続します。そして、キャッシュが十分にウォームアップされ、アプリケーションが重要な読取りパスで必要とするデータのほぼすべてがすでに True Cache内にある安定状態では、これはアプリケーションのスムーズな読取りアクセスを確保する上で非常に役に立ちます。

では、これは実際にはどのように機能するのでしょうか。また、このために何らかの設定が必要なのでしょうか。

必要なのは、True Cacheをホストするマシンまたはノードで、True CacheノードのSGA用に256GBを超えるメモリを割り当てることです。もちろん、True Cache用のメモリは多ければ多いほど良いですし、True Cacheの適切なサイジングはシステム設計の一環として行う必要があります。ただし、SGAに必要な最小メモリ容量は256GBです。それだけで、残りはすべてTrue Cacheによって自動的に処理されます。

True Cacheは、プライマリ・データベースが停止している場合でもアプリケーションからの読取りを提供するために必要なメタデータ(プライマリ・データベースから取得したもの)を、システム内に自動的に保持します。プライマリ・データベースが停止しても、アプリケーションはTrue Cacheにキャッシュされているデータをシームレスに読み取り続けることができます。

アプリケーションが、True Cache内に存在しないデータ・ブロックのデータを必要とする読取りを求めたらどうなりますか?

これらの読取りクエリーは、OCI-61857(プライマリ・データベースとの通信に失敗したことを示す)エラーを返します。

まとめ

Oracle True Cache は、プライマリ・データベースが停止した場合でも、キャッシュされたデータから読取りをシームレスに提供します。これは、計画外停止と計画メンテナンス・イベントの両方で役立ちます。 この機能はTrue Cacheに標準で備わっており、エンタープライズ・アプリケーションの高い読取り可用性をサポートします。

リソース:

Oracle True Cache Homepage: https://www.oracle.com/jp/truecache
Oracle True Cache ユーザーズ・ガイド: True Cache ユーザーズ・ガイド
Oracle Live Labs Workshop for True Cache: Live Labs for True Cache