キャッシュ・グループの手動によるロードおよびリフレッシュ

キャッシュされたOracle Database表からTimesTenキャッシュ表にキャッシュ・インスタンスを手動で挿入または更新するには、LOAD CACHE GROUP文またはREFRESH CACHE GROUP文を使用します。

キャッシュ・グループのロードとリフレッシュの違いは次のとおりです。

  • LOAD CACHE GROUP文は、キャッシュされたOracle Database表にコミットされた挿入のみをTimesTenキャッシュ表にロードします。新規キャッシュ・インスタンスはキャッシュ表にロードされますが、キャッシュ表にすでに存在するキャッシュ・インスタンスは、キャッシュされたOracle Database表にある対応する行が更新または削除されても、更新または削除されません。ロード処理は、主に、キャッシュ・グループに最初にデータを移入するために使用します。

  • REFRESH CACHE GROUP文は、キャッシュ表にすでに存在するキャッシュ・インスタンスを含め、TimesTenキャッシュ表のキャッシュ・インスタンスをキャッシュされたOracle Database表の最新のデータに置き換えます。リフレッシュ処理は、主に、キャッシュ・グループに最初にデータを移入した後、キャッシュされたOracle Database表にコミットされた変更でキャッシュ・グループの内容を更新するために使用します。

    静的なキャッシュ・グループの場合、リフレッシュ処理はキャッシュ・グループに対してUNLOAD CACHE GROUP文を発行し、続いてLOAD CACHE GROUP文を発行することと同じです。事実上、キャッシュされたOracle Database表にコミットされたすべての挿入、更新および削除がキャッシュ表にリフレッシュされます。新しいキャッシュ・インスタンスがキャッシュ表にロードされる場合があります。キャッシュ表にすでに存在するキャッシュ・インスタンスは、キャッシュされたOracle Database表にある対応する行が更新または削除されると、更新または削除されます。UNLOAD CACHE GROUP文の詳細は、「キャッシュ・グループのアンロード」を参照してください。

    動的キャッシュ・グループの場合、キャッシュ表の既存のキャッシュ・インスタンスのみがリフレッシュされるため、リフレッシュ処理はキャッシュされたOracle Database表にコミットされた更新および削除のみをキャッシュ表にリフレッシュします。新規キャッシュ・インスタンスがキャッシュ表にロードされないため、リフレッシュ処理が完了すると、キャッシュ表に含まれるキャッシュ・インスタンスの数は以前と同じか少なくなります。新しいキャッシュ・インスタンスを動的キャッシュ・グループのキャッシュ表にロードするには、LOAD CACHE GROUP文を使用するか、または動的ロード処理を実行します。動的ロード処理の詳細は、「動的キャッシュ・グループ」を参照してください。

ほとんどのキャッシュ・グループ・タイプで、LOAD CACHE GROUP文またはREFRESH CACHE GROUP文のWHERE句を使用して、キャッシュ表にロードまたはリフレッシュされる行を限定できます。

キャッシュ表定義にWHERE句が使用されていると、LOAD CACHE GROUP文またはREFRESH CACHE GROUP文でWHERE句が使用されていなくても、WHERE句の条件を満たす行のみがキャッシュ表にロードまたはリフレッシュされます。

キャッシュ・グループに時間ベースのエージング・ポリシーが定義されている場合、ルート表の行のタイムスタンプがエージング・ポリシーの存続期間内にあるキャッシュ・インスタンスのみがキャッシュ表にロードまたはリフレッシュされます。

ロード処理またはリフレッシュ処理が単一のトランザクション内で多数のキャッシュ・インスタンスを処理すると同時実行性およびスループットが大幅に低下するため、これを避けるには、COMMIT EVERY n ROWS句を使用して、コミット頻度を指定します(WITH ID句を使用していない場合)。COMMIT EVERY 0 ROWSを指定すると、ロード処理またはリフレッシュ処理は単一のトランザクションで処理されます。

また、ロード処理の対象が大量のデータの場合は、PARALLEL句を使用してスレッド数を指定することで、パラレル化を使用してスループットを向上させます。

COMMIT EVERY n ROWS句を使用するLOAD CACHE GROUP文またはREFRESH CACHE GROUP文は、独自のトランザクションで実行する必要があり、同じトランザクション内で他の処理を実行しないようにします。

次の例では、キャッシュされたOracle Database表からcustomer_ordersキャッシュ・グループのTimesTenキャッシュ表に新しいキャッシュ・インスタンスをロードします。

LOAD CACHE GROUP customer_orders COMMIT EVERY 256 ROWS PARALLEL 2;

次の例では、キャッシュされたOracle Database表からnew_customersキャッシュ・グループにWHERE句を使用して、TimesTenキャッシュ表にロードします。WHERE句は、顧客番号が5000以上である顧客の新しいキャッシュ・インスタンスを指定します。

LOAD CACHE GROUP new_customers WHERE (sales.customer.cust_num >= 5000)
  COMMIT EVERY 256 ROWS;

次の例では、キャッシュされたOracle Database表からtop_productsキャッシュ・グループ内のTimesTenキャッシュ表にキャッシュ・インスタンスをリフレッシュします。

REFRESH CACHE GROUP top_products COMMIT EVERY 256 ROWS;

次の例では、キャッシュされたOracle Database表からupdate_anywhere_customersキャッシュ・グループ内のTimesTenキャッシュ表でリフレッシュします。WHERE句では、郵便番号60610にある顧客のキャッシュ・インスタンスを指定します。

REFRESH CACHE GROUP update_anywhere_customers
  WHERE (sales.customer.zip = '60610') COMMIT EVERY 256 ROWS;

『Oracle TimesTen In-Memory Database SQLリファレンス』「LOAD CACHE GROUP」および「REFRESH CACHE GROUP」を参照してください。

この項の後半では、次の内容について説明します。