ヘッダーをスキップ
Oracle In-Memory Database Cacheユーザーズ・ガイド
リリース11.2.1
B56054-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

1 Oracle In-Memory Database Cacheの概念

Oracle In-Memory Database CacheはOracle Database製品オプションで、Oracle TimesTen In-Memory Databaseが含まれます。 Oracle In-Memory Database Cacheは、データベース・キャッシュとして使用され、アプリケーション層でOracleデータをキャッシュしてOracle Databaseでのワークロードを削減します。 また、Oracle DatabaseとTimesTenデータベース間の接続とデータ転送を可能にし、TimesTenデータベースに流れる大量のイベントの取得と処理、および後続データのOracle Databaseへの転送も簡単になります。

TimesTenデータベースにOracleデータをキャッシュするには、キャッシュ・グリッドを定義してから、キャッシュ・グループを作成します。 TimesTenデータベースのキャッシュ・グループでは、単一のOracle表または関連する一連のOracle表をキャッシュできます。

この章の内容は次のとおりです。

キャッシュ・グリッドの概要

キャッシュ・グリッドとは、Oracle DatabaseからTimesTenデータベースにデータをキャッシュし、キャッシュ一貫性を確保するために連携する一連の分散TimesTenインメモリー・データベースのことです。 グリッドは、リレーショナル・データ・モデルを使用してアプリケーション・データをまとめて管理する1つ以上のインメモリー・データベース・グリッド・メンバーで構成されています。 グリッドのメンバーは、単一のOracle Databaseからデータをキャッシュします。 各グリッド・メンバーは、スタンドアロンTimesTenデータベースまたはアクティブ・スタンバイ・ペアでサポートされます。

グリッド・ノードとは、グリッド・メンバーのデータベースのことです。 ノードは次のいずれかになります。

したがって、スタンドアロン・データベースであるグリッド・メンバーは、1つのノードで構成されます。 アクティブ・スタンバイ・ペアであるグリッド・メンバーは、2つのノードで構成されます。

図1-1に、2つのスタンドアロンTimesTenデータベースと1つのアクティブ・スタンバイ・ペアの3つのメンバーからなるキャッシュ・グリッドを示します。 グリッドにはノードが4つあります。2つのスタンドアロンTimesTenデータベース、アクティブ・スタンバイ・ペアのアクティブ・マスター・データベースおよびスタンバイ・マスター・データベースです。 読取り専用サブスクライバ・データベースは、Oracle Databaseとの接続性がないため、キャッシュ・グリッドに含まれません。 読取り専用サブスクライバでは、スタンバイ・マスター・データベースからレプリケートされた更新を受け取ります。

図1-1 3つのグリッド・メンバーがOracle Databaseからデータをキャッシュするキャッシュ・グリッド

図1-1の説明が続きます。
「図1-1 3つのグリッド・メンバーがOracle Databaseからデータをキャッシュするキャッシュ・グリッド」の説明

キャッシュ・グリッドでは、キャッシュ・データが共有記憶域のない複数のグリッド・メンバーに動的に分散されます。 このアーキテクチャによって、アプリケーションの処理のニーズに基づいた、キャッシュ・グリッドの容量の拡張が可能になります。 ワークロードの増減に応じて、新しいグリッド・メンバーがグリッドにアタッチされたり、既存のグリッド・メンバーがグリッドからデタッチされます。 グリッドへのアタッチまたはグリッドからのデタッチはオンラインで処理され、他のグリッド・メンバーに対する処理に割り込みません。 リクエストがグリッド・メンバーに送信されると、キャッシュ・グリッドでは、アプリケーション・アクセス・パターンに基づいて自動的にデータが再分散されます。 データの場所はアプリケーションに対して透過的ですが、キャッシュ・グリッドでは、アクセス時間を最小限に抑えるために動的にデータを再分散します。 キャッシュ・グリッドによって、グリッド・メンバー間で自動的にキャッシュ一貫性およびトランザクション一貫性が維持されます。

キャッシュ・グリッド内のTimesTenデータベースには、明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループだけでなく、様々なキャッシュ・グループ分類およびカテゴリでサポートされているキャッシュ・グループ・タイプのローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループも含めることができます。

キャッシュ・グループの様々なタイプの詳細は、「キャッシュ・グループ・タイプ」を参照してください。

明示的にロードされるキャッシュ・グループと動的キャッシュ・グループ間の相違の詳細は、「キャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループ」を参照してください。

ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ間の相違の詳細は、「キャッシュ・グリッド全体でのデータの共有: ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ」を参照してください。

キャッシュ・グリッドの作成およびTimesTenデータベースのキャッシュ・グリッドへの関連付けの詳細は、「キャッシュ・グリッドの構成」を参照してください。

キャッシュ・グループの概要

キャッシュ・グループでは、TimesTenデータベースにキャッシュするOracleデータを定義します。 キャッシュ・グループを定義すると、単一のOracle表または関連する一連のOracle表のすべてまたは一部をキャッシュできます。

図1-2に、単一のOracle表customerのサブセットをキャッシュするtarget_customersというキャッシュ・グループを示します。

図1-2 単一の表のキャッシュ・グループ

図1-2の説明が続きます。
「図1-2 単一の表のキャッシュ・グループ」の説明

1つのルート表および1つ以上の子表を定義すると、複数のOracle表を同じキャッシュ・グループにキャッシュできます。 キャッシュ・グループには、ルート表を1つのみ含めることができます。

複数の表を持つキャッシュ・グループでは、各子表が外部キー制約を使用して同じキャッシュ・グループ内のルート表または別の子表を参照する必要があります。 複数表のキャッシュ・グループ内の表は外部キー制約を介してTimesTenデータベースで互いに関連している必要がありますが、対応する表が必ずしもOracle Databaseで互いに関連している必要はありません。 ルート表は外部キー制約のある表を参照しません。 複数表のキャッシュ・グループの特性の詳細は、「複数表のキャッシュ・グループ」を参照してください。

キャッシュ・インスタンス

データは、キャッシュ・インスタンスと呼ばれる単位でOracle DatabaseからTimesTenデータベース内のキャッシュ・グループにロードされます。 キャッシュ・インスタンスは、子表の関連行のセットとともにキャッシュ・グループのルート表の単一行として定義されます。

図1-3に、customer_ordersキャッシュ・グループの表を3つ示します。 ルート表はcustomerです。ordersおよびorder_itemは子表です。 customer表のcust_num主キー列の値が122の行で識別されるキャッシュ・インスタンスには、次の行が含まれています。

  • orders表のcust_num列の値が122の行2つ(ord_num主キー列の値は44325または65432

  • order_item表のord_num列の値が44325または65432の行3つ

図1-3 複数表のキャッシュ・グループ

図1-3の説明が続きます。
「図1-3 複数表のキャッシュ・グループ」の説明

キャッシュ・グループ・タイプ

よく使用されるキャッシュ・グループのタイプは、次のとおりです。

  • 読取り専用キャッシュ・グループ

    読取り専用キャッシュ・グループでは、Oracle Databaseのキャッシュ表にコミットされた更新がTimesTenデータベースのキャッシュ表に自動的にリフレッシュされるキャッシュ動作が実行されます。 読取り専用キャッシュ・グループの使用が適しているのは、参照データがアプリケーションから頻繁にアクセスされる場合です。

    読取り専用キャッシュ・グループの詳細は、「読取り専用キャッシュ・グループ」を参照してください。

  • ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループ

    AWTキャッシュ・グループでは、TimesTenデータベースのキャッシュ表にコミットされた更新が自動的にOracle Databaseのキャッシュ表に非同期に伝播されるキャッシュ動作が実行されます。 AWTキャッシュ・グループの使用が適しているのは、高速データ取得およびオンライン・トランザクション処理です。

    AWTキャッシュ・グループの詳細は、「ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループ」を参照してください。

キャッシュ・グループには、この他に次のタイプがあります。

  • SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループ

    SWTキャッシュ・グループでは、TimesTenデータベースのキャッシュ表にコミットされた更新が自動的にOracle Databaseのキャッシュ表に同期して伝播されるキャッシュ動作が実行されます。

    SWTキャッシュ・グループの詳細は、「SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループ」を参照してください。

  • ユーザー管理キャッシュ・グループ

    ユーザー管理キャッシュ・グループでは、キャッシュ動作のカスタマイズを定義します。

    たとえば、自動リフレッシュも自動伝播も使用しないキャッシュ・グループを定義できます。この場合、キャッシュ表にコミットされた更新はキャッシュされたOracle表に手動で伝播またはフラッシュすることになります。

    また、すべての表を対象とした同期的な自動伝播と自動リフレッシュの両方を使用するキャッシュ・グループを定義することもできます。

    ユーザー管理キャッシュ・グループの詳細は、「ユーザー管理キャッシュ・グループ」を参照してください。

TimesTenデータベースとOracle Database間での更新の送信

TimesTenキャッシュ表とキャッシュされたOracle表との間でコミットされた更新を転送すると、2つのデータベースでこれらの表の同期が確保されます。

図1-4に示すように、伝播またはフラッシュとは、TimesTenデータベースのキャッシュ表にコミットされた更新をOracle Databaseのキャッシュ表に送信するプロセスのことです。 フラッシュは手動での処理であり、伝播は自動での処理です。

ロード、リフレッシュまたは自動リフレッシュとは、Oracle Databaseのキャッシュ表にコミットされた更新をTimesTenデータベースのキャッシュ表に送信するプロセスのことです。ロードおよびリフレッシュは手動での処理となり、自動リフレッシュは自動での処理となります。

ユーザー管理キャッシュ・グループに対してのみ発行可能なFLUSH CACHE GROUP文の詳細は、「ユーザー管理キャッシュ・グループのフラッシュ」を参照してください。

AWTキャッシュ・グループおよびSWTキャッシュ・グループに対する伝播操作の処理方法の詳細は、「ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループ」および「SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループ」をそれぞれ参照してください。

LOAD CACHE GROUP文およびREFRESH CACHE GROUP文の詳細は、「キャッシュ・グループのロードおよびリフレッシュ」を参照してください。

自動リフレッシュ処理の詳細は、「AUTOREFRESHキャッシュ・グループ属性」を参照してください。

図1-4 TimesTenデータベースとOracle Database間でのコミットされた更新の送信

図1-4の説明が続きます。
「図1-4 TimesTenデータベースとOracle Database間でのコミットされた更新の送信」の説明

キャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループ

キャッシュ・グループは、明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループのいずれかにカテゴリ化されます。

明示的にロードされるキャッシュ・グループでは、キャッシュ・インスタンスはOracleからTimesTenキャッシュ表にロード処理またはリフレッシュ処理を使用して手動でロードするか、または自動リフレッシュ処理を使用して自動的にロードします。 キャッシュ表に対して問合せなどの処理を実行すると、事前に該当するキャッシュ表がロードされます。 明示的にロードされるキャッシュ・グループが適しているのは、キャッシュするデータ・セットが静的であり、アプリケーションがキャッシュ表に対して処理を実行する前にそのデータ・セットを定義しておくことができる場合です。 デフォルトでは、キャッシュ・グループは動的であると定義しないかぎり、明示的にロードされます。

動的キャッシュ・グループでは、キャッシュ・インスタンスはOracleからTimesTenキャッシュ表に動的ロード処理を使用してリクエストに応じてロードするか、またはロード処理を使用して手動でロードします。 動的キャッシュ・グループに対して手動リフレッシュ処理または自動リフレッシュ処理を実行すると、既存のキャッシュ・インスタンスを更新または削除できますが、キャッシュされていないOracleデータに対して更新をコミットしても新しいキャッシュ・インスタンスはキャッシュ表にロードされません。 動的キャッシュ・グループが適しているのは、キャッシュするデータ・セットが少量であり、アプリケーションがキャッシュ表に対して処理を実行する前にOracleからそのデータ・セットを事前ロードしておく必要がない場合です。

キャッシュ・グループのロード処理とリフレッシュ処理の詳細は、「TimesTenデータベースとOracle Database間での更新の送信」を参照してください。

明示的にロードされるキャッシュ・グループに対してロード処理およびリフレッシュ処理を実行する場合と、同じ処理を動的キャッシュ・グループに対して実行する場合の相違の詳細は、「キャッシュ・グループのロードおよびリフレッシュ」を参照してください。

動的ロード処理の詳細は、「キャッシュ・グループの動的ロード」を参照してください。

どのキャッシュ・グループ・タイプ(読取り専用、AWT、SWT、ユーザー管理)も、明示的にロードされるキャッシュ・グループとして定義できます。 AUTOREFRESHキャッシュ・グループ属性とPROPAGATEキャッシュ表属性の両方を使用するユーザー管理キャッシュ・グループを除いて、すべてのキャッシュ・グループ・タイプを動的キャッシュ・グループとして定義できます。

動的キャッシュ・グループの詳細は、「動的キャッシュ・グループ」を参照してください。

キャッシュ・グリッド間でのデータの共有: ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ

キャッシュ・グループは、明示的にロードされるか動的かの他に、ローカルかグローバルかのいずれかに分類されます。

ローカル・キャッシュ・グループでは、キャッシュ表のデータがTimesTenデータベース間で共有されません。このことは、TimesTenデータベースのいずれも同じキャッシュ・グリッドのメンバーである場合でも同じです。 キャッシュ・インスタンスが特定のグリッド・メンバーにローカルであるため、データベースに重複しているデータがあってもかまいません。 TimesTenキャッシュ表にコミットされた更新は、他のグリッド・メンバーとの調整がないまま、キャッシュされたOracle表に伝播されます。 どのキャッシュ・グループ・タイプも、ローカル・キャッシュ・グループとして定義できます。 ローカル・キャッシュ・グループは、明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループのいずれかに定義できます。 ローカル・キャッシュ・グループの使用が適しているのは、参照データが頻繁に読み込まれ、すべてのグリッド・メンバーに存在可能である場合、および最適な同時実行性およびスループットを実現するために非結合データが論理的にパーティション化されている場合です。 デフォルトでは、キャッシュ・グループはグローバルであると定義しないかぎり、ローカルとなります。

グローバル・キャッシュ・グループでは、キャッシュ表のデータが、同じキャッシュ・グリッドのメンバーであるTimesTenデータベース間で共有されます。 複数のグリッド・メンバーの同じデータに更新をコミットした場合は、グリッドのメンバー間で読取り/書込みデータ一貫性を確保するために、更新内容がグリッド内での発行順にOracleに伝播されます。グローバル・キャッシュ・グループとして定義できるのは、動的AWTキャッシュ・グループのみです。 グローバル・キャッシュ・グループは動的として定義する必要があるため、新しいキャッシュ・インスタンスがリクエストに応じてグローバル・キャッシュ・グループのキャッシュ表にロードされます。 グローバル・キャッシュ・グループの使用が適しているのは、グリッドのメンバーとOracle Databaseとの間でデータの一貫性を確保するために、更新可能なデータにアクセスしたり、更新可能なデータが存在できるグリッド・メンバーが一度に1つにかぎられる場合です。

グローバル・キャッシュ・グループの作成と使用の詳細は、「グローバル・キャッシュ・グループ」を参照してください。

キャッシュ・グループ・タイプの概要

図1-5の表に、キャッシュ・グループの作成時にユーザーが使用できるキャッシュ・グループのタイプ、カテゴリおよび分類の有効な組合せの概要を示します。 キャッシュ・グループ・カテゴリによって、キャッシュ・グループへのデータのロード方法が決まります。 キャッシュ・グループ分類によって、キャッシュ・グループのデータがキャッシュ・グリッド間で共有できるかどうかが決まります。

どのキャッシュ・グループ・タイプにも、明示的にロードされるローカル・キャッシュ・グループまたは動的なローカル・キャッシュ・グループを作成できます。 グローバル・キャッシュ・グループは、カテゴリおよびタイプが動的AWTであるキャッシュ・グループにのみ作成できます。

図1-5 キャッシュ・グループのタイプおよびカテゴリの概要

図1-5の説明が続きます。
「図1-5 キャッシュ・グループのタイプおよびカテゴリの概要」の説明

キャッシュの高可用性ソリューション

Oracle Databaseへの接続性を維持しつつ、キャッシュ表の高可用性を実現し、フェイルオーバーおよびリカバリが容易になるよう、Oracle In-Memory Database Cacheを構成できます。 TimesTenデータベースをアクティブ・スタンバイ・ペアのレプリケーション・スキームに参加させると、読取り専用キャッシュ・グループまたはAWTキャッシュ・グループでキャッシュ表の高可用性を実現できます。

アクティブ・スタンバイ・ペアを構成すると、TimesTenデータベースの高可用性を実現できます。 グリッド・メンバーを複数配置すると、TimesTenキャッシュ・グリッドの高可用性を実現できます。 Oracle Real Application Clusters(RAC)およびData Guardを構成すると、Oracle Databaseの高可用性を実現できます。

キャッシュ表のレプリケーションの構成の詳細は、「キャッシュ表のレプリケート」を参照してください。

Oracle In-Memory Database CacheおよびRACの詳細は、「RAC環境でのOracle In-Memory Database Cacheの使用」を参照してください。

Oracle In-Memory Database CacheおよびData Guardの詳細は、「Oracle In-Memory Database CacheとData Guardの使用」を参照してください。