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
句を使用して、時間ベースのエージング・ポリシーを追加します。
自動リフレッシュを使用したキャッシュ・グループでエージング・ポリシーを追加、変更または削除する前に、キャッシュ・エージェントを停止する必要があります。