1 Oracle True Cacheの概要

Oracle True Cacheは、Oracle Database用の、一貫性が確保され自動管理される、インメモリーSQLおよびキー値(オブジェクトまたはJSON)キャッシュです。

インタラクティブ・ツアーについては、Oracle True Cacheテクニカル・アーキテクチャを参照してください。

1.1 Oracle True Cacheについて

True Cacheは、Oracleデータベースの前にある、読取り専用のインメモリー・キャッシュです。

Oracle Active Data Guardと同様に、True Cacheはプライマリ・データベースの完全に機能する読取り専用レプリカですが、大部分がディスクレスです。

最新のアプリケーションには、多くの場合、多数の接続と、データへの高速で低レイテンシなアクセスが必要です。通常、アプリケーションは更新よりも多くの読取りを実行し、データベースのパフォーマンスに影響を与えずにキャッシュから読み取ることができるため、一般的な方法は、データベースの前にキャッシュを配置することです。たとえば、航空会社の予約システムは、ユーザーがフライトを購入するときにデータを頻繁に読み取り、データがデータベース内のものと比較して最新ではない場合も問題ありません。アプリケーションが最新のデータにアクセスする必要があるのは、ユーザーがフライトを予約するときのみです。

従来のキャッシュとは異なり、True Cacheは、最も頻繁にアクセスされるデータをキャッシュ内に自動的に保持し、キャッシュとプライマリ・データベース、同じキャッシュ内の他のオブジェクト、およびその他のキャッシュとの整合性を保ちます。JSONを含むすべてのOracle Databaseオブジェクトおよびデータ型をキャッシュします。

True CacheはOracle Databaseセキュリティ・ポリシーを実装しているため、キャッシュへのアクセスを制御できます。これにより、通常はキャッシュされない場合がある個人情報などの機密データをキャッシュできます。

1.2 Oracle True Cacheの利点

Oracle True Cacheには、アプリケーションの開発とパフォーマンスに関連するいくつかのビジネス上の利点があります。

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

1.3 True Cacheの仕組み

Oracle True Cacheの仕組みの概要を示します。

  • アプリケーションは、True Cacheまたはプライマリ・データベースのどちらからデータを問い合せるかを決定します。この動作の詳細は、「アプリケーション使用モデル」を参照してください。
  • True Cacheは、メモリーにキャッシュされたデータを使用して問合せに対応します。データがキャッシュにない場合、True Cacheはプライマリ・データベースからデータをフェッチします。
  • True Cacheは起動時に空であり、キャッシュにデータを移入するために大量のデータを読み取ります。ブロックがキャッシュされると、プライマリ・データベースからのREDO適用によってブロックが自動的に更新されます。これは、Oracle Active Data Guardで使用される更新メカニズムに似ています。
  • True Cacheに対する問合せでは、コミットされたデータのみが返され、データは常に一貫しています。
  • すべてのキャッシュと同様に、True Cacheデータはプライマリ・データベースに存在するため、最新のデータではない可能性があります。
  • 複数のTrue Cacheが存在し、同じデータベース・アプリケーション・サービスを提供する場合、リスナーはセッションを自動的に分散し、各キャッシュにロード・バランシングします。

1.4 True Cacheの使用に関する考慮事項

Oracle True Cacheを使用するかどうかを決定する場合は、次の点を考慮してください。

  • True Cache用に十分なメモリーを構成して、最も頻繁にアクセスされるデータがメモリーに保持されるようにする必要があります。
  • True Cacheでは、スタンバイREDOログ・ファイルに少量の記憶域のみが必要です。制御ファイル、SPFILE、一時データ・ファイルなどの構成ファイルは自動的に作成されます。
  • True Cacheは読取り専用キャッシュであるため、キャッシュを直接更新することはできませんが、DMLリダイレクションを使用してキャッシュを間接的に更新できます。

1.5 アプリケーション使用モデル

アプリケーションでは、2つの方法でTrue Cacheを使用できます。

  • アプリケーションでは、2つの物理接続(1つはプライマリ・データベース、もう1つはTrue Cache)が保持されます。各接続にはデータベース・アプリケーション・サービスがあり、アプリケーションは読取りか書込みかに基づいて、使用する接続を選択します。このモデルは、既存のクライアント・ドライバおよび任意のプログラミング言語で使用できます。

    アプリケーションは、最新のデータを表示する必要がない問合せをTrue Cacheデータベース・アプリケーション・サービスを介してTrue Cacheに送信します。アプリケーションは、他の問合せおよび更新をプライマリ・データベース・アプリケーション・サービスを介してプライマリ・データベースに送信します。

  • アプリケーションは、プライマリ・データベースのデータベース・アプリケーション・サービスを使用する1つの論理接続を維持します。JDBC Thinドライバ(Oracle Database 23ai以降)は、プライマリ・データベースおよびTrue Cacheへの物理接続を維持します。このモデルは、Javaアプリケーションでのみ機能します。

    アプリケーションは、インスタンス名を指定せずに、プライマリ・データベースとTrue Cacheを切り替えます。アプリケーションは、特別なコールを使用して、論理接続に読取り専用または読取り/書込みのフラグを付けます。読取り専用の場合、問合せはTrue Cacheに送信されます。それ以外の場合は、プライマリ・データベースに送信されます。

1.6 ロックフリーの同時実行性制御

JSONドキュメントと連携するアプリケーションの場合、OracleはHTTPエンティティ・タグ(ETAG)のサポートを拡張して、ロックフリーで楽観的な同時実行性制御を実装します。

True Cacheに対するデータベースGETリクエストでは、ETAGが自動的に計算され、返されたドキュメントに挿入されます。変更されたドキュメントがPUTされてプライマリ・データベースに戻ると、次のようになります:

  1. データベースは、基礎となるドキュメント行が、GETリクエストによって計算されたETAGとまだ一致していることを検証します。
  2. 行がETAGと一致する場合、行はアトミックに更新されます。
  3. 一致がない場合は、別のユーザーがデータを変更しており、PUTリクエストは拒否されます。
  4. PUTリクエストは、新しいデータを使用して再試行できます。