ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース7.0
E05172-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

キャッシュ・グループでのエージングの実装

キャッシュ・グループのルート表に対してエージング・ポリシーを定義できます。エージング・ポリシーは、エージングのタイプ、エージング属性およびエージング状態(ONまたはOFF)を参照します。使用状況ベースまたは時間ベースのいずれかのタイプのエージングを指定できます。使用状況ベースのエージングでは、指定されたデータ・ストアの使用状況の範囲内の最低使用頻度(LRU)のデータが削除されます。時間ベースのエージングでは、指定されたデータ存続期間およびエージング・プロセスの頻度に基づいてデータが削除されます。同じデータ・ストアに使用状況ベースのエージングと時間ベースのエージングを両方定義できますが、個々のキャッシュ・グループまたは表に対しては、いずれかのタイプのエージングのみを定義できます。

CREATE CACHE GROUP文の表定義を使用して、新しいキャッシュ・グループのルート表のエージング・ポリシーを指定します。表にエージング・ポリシーが定義されていない場合、ALTER TABLE文を使用して既存のキャッシュ・グループのルート表にエージング・ポリシーを追加できます。

エージングは、キャッシュ・インスタンスに基づいているため、キャッシュ・グループのルート表に対してのみ定義できます。

キャッシュ・グループにない表に対してエージングを定義することもできます。キャッシュ・グループにない表に対するエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表でのエージングの実装に関する説明を参照してください。

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

使用状況ベースのエージング

使用状況ベースのエージングを使用すると、最低使用頻度(LRU)のデータを削除することによって、データ・ストアで使用されるメモリーの量を、指定されたしきい値内に維持できます。LRUエージングは、AUTOREFRESH属性が指定されているキャッシュ・グループを除く、すべてのタイプのキャッシュ・グループで使用できます。

キャッシュ・グループに対してLRUエージングを定義するには、CREATE CACHE GROUP文の表定義のAGING LRU句を使用します。状態がONの場合、エージングは自動的に開始されます。データ・ストアで、LRUエージング・ポリシーを最初に定義した表がルート表である場合は、ただちにエージングが開始されます。そうでない場合は、LRUエージング・ポリシーが定義された表に対するエージングが開始されると同時に、ルート表に対するエージングが開始されます。

データ・ストアのすべての表に対してLRUエージング属性を指定するには、ttAgingLRUConfig組込みプロシージャを使用します。属性値は、LRUエージング・ポリシーを持つデータ・ストアのすべての表に適用されます。ttAgingLRUConfig組込みプロシージャをコールしない場合は、デフォルトの属性値が使用されます。

次の表に、LRUエージング属性の概要を示します。

LRUエージング属性
説明

LowUsageThreshhold

LRUエージングが無効になるデータ・ストアのPermSizeの割合。

HighUsageThreshhold

LRUエージングが有効になるデータ・ストアのPermSizeの割合。

AgingCycle

エージング・サイクル間の時間(分単位)。

LRUエージング・ポリシーを定義した後に、AgingCycleに新しい値を設定すると、現在の時刻と新しいサイクル時間に基づいてエージングが発生します。たとえば、元のエージング・サイクルが15分で10分前にLRUエージングが発生した場合、5分後に再度エージングが発生します。ただし、AgingCycleパラメータを30分に変更すると、AgingCycleの新しい値を指定してttAgingLRUConfigプロシージャをコールしてから30分後にエージングが発生します。

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

ALTER TABLE文を使用すると、次の作業を行えます。

エージングを開始するタイミングをスケジュールするには、ttAgingScheduleNow組込みプロシージャを使用します。詳細は、「エージングを開始するタイミングのスケジューリング」を参照してください。

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

時間ベースのエージング

時間ベースのエージングでは、指定されたデータ存続期間およびエージング・プロセスの頻度に基づいてキャッシュ・グループのルート表からデータが削除されます。CREATE CACHE GROUP文の表定義のAGING USE句で時間ベースのエージングを定義します。ALTER TABLE文のAGING USE句を使用して、既存のキャッシュ・グループのルート表に時間ベースのエージング・ポリシーを追加します。

AGING USE句には、ColumnName引数が含まれます。ColumnNameは、時間ベースのエージングに使用される列の名前です。この列をタイムスタンプ列と呼びます。タイムスタンプ列は次のように定義する必要があります。

タイムスタンプ列の値は、アプリケーションによって更新されます。この列の値が不明な行があり、それらの行をエージングしたくないときは、デフォルト値を大きくして列を定義します。タイムスタンプ列に索引を作成すると、エージング・プロセスのパフォーマンスを向上できます。


注意: 列を追加または変更し、その列をNOT NULLとして定義することはできないため、既存の表に列を追加または変更して、その列をタイムスタンプ列として使用することはできません。

時間ベースのエージング・ポリシーを持つ表からタイムスタンプ列を削除することはできません。

存続期間は、CREATE CACHE GROUP文のLIFETIME句で、日、時間または分の単位で指定します。

タイムスタンプ列の値はSYSDATEから差し引かれます。結果は指定した単位(分、時間、日)を使用して切り捨てられ、LIFETIME値との比較が行われます。その結果がLIFETIME値より大きい場合、行はエージングの対象となります。

CYCLE句を使用して、指定された存続期間を超えたデータを削除するために、システムが行を調査する頻度を指定します。CYCLEを指定しない場合、エージングは5分ごとに発生します。CYCLEに0を指定した場合、絶え間なくエージングが行われます。状態がONの場合は、自動的にエージングが開始されます。

ALTER TABLE文を使用すると、次の作業を行えます。

エージングを開始するタイミングをスケジュールするには、ttAgingScheduleNow組込みプロシージャを使用します。詳細は、「エージングを開始するタイミングのスケジューリング」を参照してください。

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


注意: AUTOREFRESHキャッシュ・グループのルート表を変更する場合は、キャッシュ・エージェントを停止する必要があります。追加する前にキャッシュ・エージェントを停止し、AUTOREFRESHキャッシュ・グループに対するエージングを変更または削除します。

エージングおよび外部キー

外部キーによって関連付けられる表は、同じエージング・ポリシーを持つ必要があります。

LRUエージングが有効で、子表の行が最近アクセスされた場合、親行も子行も削除されません。

時間ベースのエージングが有効で、親表の行がエージング・アウトの候補である場合、親行とそのすべての子が削除されます。

表でON DELETE CASCADEが有効な場合、設定は無視されます。

エージングを開始するタイミングのスケジューリング

エージング・プロセスをスケジューリングするには、ttAgingScheduleNow組込みプロシージャを使用します。進行中のエージング・プロセスがある場合を除いて、プロシージャをコールするとすぐにエージング・プロセスが開始されます。エージング・プロセスが進行中の場合は、そのエージング・プロセスが完了したときに開始されます。

ttAgingScheduleNowをコールすると、状態がONであるかOFFであるかにかかわらずエージング・プロセスが開始されます。ttAgingScheduleNowのコール時に、ルート表の名前を指定します。指定しないと、ttAgingScheduleNowによって、キャッシュ・グループのルート表だけでなく、エージングが定義されているデータ・ストアのすべての表に対するエージングが開始またはリセットされます。

エージング・プロセスは、ttAgingScheduleNowをコールすると1度だけ開始されます。ttAgingScheduleNowをコールしてもエージング状態は変更されません。ttAgingScheduleNowのコール時にエージング状態をOFFにすると、エージング・プロセスは開始されますが、プロセスの完了後に続行されません。エージングを続行するには、ttAgingScheduleNowを再度コールするか、エージング状態をONに変更する必要があります。

エージング状態がすでにONに設定されている場合、ttAgingScheduleNowは、ttAgingScheduleNowがコールされた時間に基づいて、エージング・サイクルをリセットします。

エージングは外部的に制御できます。それには、ALTER TABLE文でSET AGING OFF句を指定して、まずエージングを無効にします。次に、ttAgingScheduleNowを使用して、必要なときにエージングを開始します。

ttAgingScheduleNowを使用して、プロシージャのコール時に個々の表の名前を指定してエージングを開始またはリセットできます。表の名前を指定しないと、ttAgingScheduleNowによって、エージングが定義されているデータ・ストアのすべての表に対するエージングが開始またはリセットされます。

ttTraceMonユーティリティを使用してエージングを監視できます。詳細は、『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のAGINGのトレースに関する項を参照してください。

スライド期間の構成

時間ベースのエージングを使用すると、キャッシュ・グループ・データにスライド期間が作成されます。スライド期間を持つキャッシュ・グループでは、キャッシュに特定の時間間隔を満たすデータのみが含まれるように、定期的に新しいデータが追加され、古いデータが削除されます。

キャッシュ・グループ・データにスライド期間を構成するには、増分AUTOREFRESH属性を使用し、時間ベースのエージング・ポリシーを指定します。AUTOREFRESH処理では、Oracle表のタイムスタンプをチェックして、キャッシュされた表に新しいデータを挿入する必要があるかどうかを判断します。SYSDATEおよびタイムゾーンは、OracleとTimesTenで同じである必要があります。

他のタイプのキャッシュ・グループに対するスライド期間を構成するには、手動ロード、透過的ロード、リフレッシュまたは挿入を使用して新しいデータをキャッシュ・グループ表に挿入します。

例2.7

次の文は、スライド期間のプロパティを持つキャッシュ・グループを作成します。

CREATE READONLY CACHE GROUP cg1

  AUTOREFRESH STATE ON INTERVAL 1 MINUTES

  FROM t1(i NUMBER NOT NULL PRIMARY KEY,

          ts TIMESTAMP NOT NULL,

          c VARCHAR2(50))

  AGING USE ts LIFETIME 3 HOURS CYCLE 10 MINUTES;

cg1キャッシュ・グループの自動リフレッシュ間隔は1分です。このため、Oracle表の新しいデータは、1分ごとにキャッシュ・グループに挿入されます。

エージングでは、10分ごとに古いデータがチェックされます。エージングによって、3時間以上経過したデータが削除されます(ts < SYSDATE - 3 HOURS)。

AUTOREFRESH間隔およびLIFETIME間隔に対して設定したパラメータによって、データがキャッシュ内に保持される時間が決定します。存続期間の間隔に満たないうちにデータがキャッシュからエージ・アウトされる可能性があります。たとえば、AUTOREFRESH間隔が3日で、LIFETIME間隔が30日である場合、データはキャッシュに入るときにすでに3日経過している可能性があります。このようなデータは27日後にキャッシュから削除されます。このような状況が発生するのは、エージングがTimesTenタイムスタンプではなく、Oracleタイムスタンプに基づいているためです。