TimesTen ClassicでのLRUエージング

LRUエージングを使用すると、最低使用頻度のデータを削除することによって、TimesTenデータベースで使用するメモリーの量を、指定されたしきい値の範囲内に維持できます。LRUエージングは、自動リフレッシュが有効になっている静的キャッシュ・グループを除いて、すべてのキャッシュ・グループ・タイプに対して定義できます。動的キャッシュ・グループには、デフォルトでLRUエージングが定義されます。

キャッシュ・グループに対してLRUエージング・ポリシーを定義するには、CREATE CACHE GROUP文のキャッシュ表定義でAGING LRU句を使用します。エージング状態がデフォルトのONに設定されている場合、エージングは自動的に発生します。

次の例では、AWTキャッシュ・グループnew_customersに対してLRUエージング・ポリシーを定義します。

CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP new_customers
FROM sales.customer
 (cust_num NUMBER(6) NOT NULL,
  region   VARCHAR2(10),
  name     VARCHAR2(50),
  address  VARCHAR2(100),
  PRIMARY KEY(cust_num))
AGING LRU ON;

LRUエージング・ポリシーは2つあります。

  • 使用中の永続メモリーの量に対する設定されたしきい値に基づくLRUのエージング。これがデフォルトです。LRUエージングを使用するように表を作成(または変更)すると、LRUエージング・ポリシーは、使用中の永続メモリーのデフォルトしきい値を使用するようにデフォルト設定されます。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「使用中の永続メモリーのしきい値に基づくLRUエージングの定義」を参照してください。

  • キャッシュ・グループの指定されたルート表の行しきい値に基づくLRUエージング。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「表の行しきい値に基づくLRUエージングの定義」を参照してください。

どちらのタイプのLRUエージングも共存できます。行しきい値ベースのエージングは、使用ベースのエージングの永続メモリーより優先されます。

最後のエージング・サイクル以降に行がアクセスされたり、参照された場合、その行は現在のエージング・サイクルではLRUエージングの対象になりません。次のいずれかの場合に、行がアクセスされた、または参照されたとみなされます。

  • 行がSELECT文またはINSERT ... SELECT文の結果セットを作成するために使用された。

  • 保留中のトランザクションで更新または削除の対象としてマークされている。

複数表のキャッシュ・グループでは、最後のエージング・サイクル以降に子表内の行がアクセスされたり参照された場合、現在のエージング・サイクルでは、親表の関連行も子表の行もLRUエージングの対象になりません。

ALTER TABLE文を使用すると、キャッシュ・グループのLRUエージング・ポリシーの変更または定義に関連する次のタスクを実行できます。

  • ルート表を指定し、SET AGING句を使用して、キャッシュ・グループのエージング状態を変更します。

  • ルート表を指定し、ADD AGING LRU句を使用して、エージング・ポリシーが定義されていないキャッシュ・グループにLRUエージング・ポリシーを追加します。

  • ルート表を指定し、DROP AGING句を使用して、キャッシュ・グループのLRUエージング・ポリシーを削除します。

キャッシュ・グループのエージング・ポリシーをLRUから時間ベースに変更するには、ルート表に対してALTER TABLE文とDROP AGING句を使用して、LRUエージング・ポリシーを削除します。次に、ルート表に対してALTER TABLE文とADD AGING USE句を使用して、時間ベースのエージング・ポリシーを追加します。

自動リフレッシュを使用したキャッシュ・グループでエージング・ポリシーを追加、変更または削除する前に、キャッシュ・エージェントを停止する必要があります。