データ・ストア内の1つ以上の表に対してエージング・ポリシーを定義できます。エージング・ポリシーとは、エージングのタイプ、属性および状態(ONまたはOFF)のことです。使用状況ベースまたは時間ベースのいずれかのタイプのエージング・ポリシーを指定できます。使用状況ベースのエージングでは、指定したデータ・ストアの使用範囲内の最低使用頻度(LRU)のデータが削除されます。時間ベースのエージングでは、指定したデータ存続期間およびエージング・プロセスの頻度に基づいてデータが削除されます。使用状況ベースと時間ベースの両方のエージングを同じデータ・ストアに定義することはできますが、特定の表に対して定義できるエージング・タイプは1つのみです。
CREATE TABLE文を使用して、新しい表のエージング・ポリシーを定義できます。既存の表にエージング・ポリシーが定義されていない場合は、ALTER TABLE文を使用してその表にエージング・ポリシーを追加できます。エージング・ポリシーは、エージング・ポリシーを破棄したり、新しいエージング・ポリシーを追加することによって変更できます。
次のタイプの表にはエージングを指定できません。
キャッシュ・グループにエージングを実装することもできます。詳細は、『Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド』のキャッシュ・グループへのエージングの実装に関する説明を参照してください。
この項の内容は次のとおりです。
使用状況ベースのエージングを使用すると、最低使用頻度(LRU)のデータを削除することによって、データ・ストアで使用されるメモリーの量を、指定したしきい値の範囲内で管理できます。
CREATE TABLE文のAGING LRU句を使用して、新しい表のLRUエージングを定義します。エージングの状態がONの場合、エージングは自動的に開始されます。
ttAgingLRUConfig組込みプロシージャを使用して、LRUエージング属性を指定します。属性値は、LRUエージング・ポリシーが含まれているデータ・ストア内のすべての表に適用されます。ttAgingLRUConfig組込みプロシージャをコールしない場合は、属性のデフォルト値が使用されます。
次の表に、LRUエージング属性の概要を示します。
LRUエージング属性 | 説明 |
LowUsageThreshhold | LRUエージングが非アクティブになるデータ・ストアPermSizeの割合(%)。 |
HighUsageThreshhold | LRUエージングがアクティブになるデータ・ストアPermSizeの割合(%)。 |
AgingCycle | エージング・サイクルの間隔(分)。 |
LRUエージング・ポリシーの定義後、AgingCycleに対して新しい値を設定すると、エージングは、その時点での時間および新しいサイクル時間に基づいて実行されます。たとえば、元のエージング・サイクルが15分で、LRUエージングが10分前に実行された場合、エージングは5分後に再度実行されるように設定されていますが、AgingCycleパラメータを30分に変更すると、AgingCycleに新しい値を指定してttAgingLRUConfigプロシージャをコールしたときから30分後にエージングが行われます。
最後のエージング・サイクル以降に行へのアクセスまたは行の参照を行った場合、その行はLRUエージングの対象ではなくなります。行は、次のいずれかの条件に当てはまる場合にアクセスまたは参照されたとみなされます。
ALTER TABLE文を使用して、次のタスクを実行できます。
エージングの開始をスケジュールするには、ttAgingScheduleNow組込みプロシージャを使用します。詳細は、「エージング開始のスケジュール」を参照してください。
表のエージングをLRUから時間ベースに変更するには、まず、DROP AGING句とともにALTER TABLE文を使用して表のエージングを破棄します。次に、ADD AGING USE句とともにALTER TABLE文を使用して時間ベースのエージングを追加します。
注意: | LRUエージングを破棄するか、またはコマンドで参照される表にLRUエージングを追加すると、TimesTenによって、コンパイルされているコマンドが無効とマークされます。これらのコマンドは、再コンパイルする必要があります。 |
時間ベースのエージングでは、指定したデータ存続期間およびエージング・プロセスの頻度に基づいてデータが表から削除されます。CREATE TABLE文のAGING USE句を使用して、新しい表の時間ベースのエージング・ポリシーを指定します。ALTER TABLE文のADD AGING USE句を使用して、既存の表に時間ベースのエージング・ポリシーを追加します。
AGING USE句には、ColumnName引数があります。ColumnNameは、時間ベースのエージングで使用される列の名前です。これをタイムスタンプ列と呼びます。タイムスタンプ列は次のように定義されます。
使用しているアプリケーションによって、タイムスタンプ列の値が更新されます。いくつかの行でこの列の値が不明な場合に、それらの行がエージングされないようにするには、その列のデフォルト値を大きい値に定義します。タイムスタンプ列に索引を作成すると、エージング・プロセスのパフォーマンスを向上できます。
注意: | 列を追加または変更してNOT NULLに定義することはできないため、既存の表で列を追加または変更した後で、その列をタイムスタンプ列として使用することはできません。 |
時間ベースのエージング・ポリシーが含まれている表からタイムスタンプ列を破棄することはできません。
タイムスタンプ列のデータ型がORA_TIMESTAMP、TT_TIMESTAMPまたはORA_DATEである場合は、CREATE TABLE文のLIFETIME句に、日、時間または分単位で存続期間を指定します。タイムスタンプ列のデータ型がTT_DATEである場合は、日単位で存続期間を指定します。
タイムスタンプ列の値は、SYSDATEから引かれます。結果は、指定した単位(分、時間、日)を使用して切り捨てられ、指定したLIFETIME値と比較されます。結果がLIFETIME値より大きい場合、その行はエージングの候補となります。
CYCLE句を使用して、システムで行を確認し、指定した存続期間を超えたデータを削除する頻度を指定します。CYCLEを指定しない場合、エージングは5分ごとに行われます。CYCLEに0(ゼロ)を指定した場合、エージングは継続して行われます。エージングは、状態がONの場合、自動的に開始されます。
ALTER TABLE文を使用して、次のタスクを実行します。
エージングの開始をスケジュールするには、ttAgingScheduleNow組込みプロシージャを使用します。詳細は、「エージング開始のスケジュール」を参照してください。
表のエージング・ポリシーを時間ベースのエージングからLRUエージングに変更するには、まず、表の時間ベースのエージングを破棄します。次に、ADD AGING LRU句とともにALTER TABLE文を使用して、LRUエージングを追加します。
外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。
LRUエージングが有効になっている間に子表内の行にアクセスした場合は、親行または子行のいずれも削除されません。
時間ベースのエージングが有効になっている場合に親表内の行がエージング・アウトの候補になると、親行およびそのすべての子が削除されます。
表でON DELETE CASCADEが有効になっている場合、この設定は無視されます。
ttAgingScheduleNow組込みプロシージャを使用してエージング・プロセスをスケジュールします。エージング・プロセスは、すでに実行中のエージング・プロセスが存在しないかぎり、プロシージャをコールするとすぐに開始されます。存在する場合は、そのエージング・プロセスが完了した後で開始されます。
ttAgingScheduleNowをコールすると、状態がONまたはOFFのいずれであるかに関係なく、エージング・プロセスが開始されます。
エージング・プロセスは、ttAgingScheduleNowをコールした結果として1回のみ開始されます。ttAgingScheduleNowをコールしても、エージングの状態は変更されません。ttAgingScheduleNowのコール時にエージングの状態がOFFの場合、エージング・プロセスは開始されますが、プロセスの完了後、エージングは継続されません。エージングを継続するには、ttAgingScheduleNowを再度コールするか、またはエージングの状態をONに変更する必要があります。
エージングの状態がすでにONに設定されている場合は、ttAgingScheduleNowがコールされた時間に基づいて、ttAgingScheduleNowによってエージング・サイクルがリセットされます。
SET AGING OFF句とともにALTER TABLE文を使用してエージングを無効にすると、外部でエージングを制御できます。その後、ttAgingScheduleNowを使用して、目的の時間にエージングを開始します。
ttAgingScheduleNowを使用して、このプロシージャのコール時に個々の表の名前を指定することによって、表のエージングを開始またはリセットします。表名を指定しない場合は、ttAgingScheduleNowによって、エージングが定義されているデータ・ストア内のすべての表のエージングが開始またはリセットされます。
アクティブなスタンバイ・ペアの場合は、アクティブなマスター・データ・ストアにエージングを実装します。エージングの結果として行われる削除は、スタンバイ・マスター・データ・ストアおよび読取り専用サブスクライバにレプリケートされます。スタンバイ・マスター・データ・ストアに対してフェイルオーバーが行われると、エージングは、ロールがACTIVEに変更された後でそのデータ・ストアに対して有効になります。
他のすべてのタイプのレプリケーション・スキームの場合は、ノードごとに個別にエージングを実装します。エージング・ポリシーは、すべてのノードで同じである必要があります。
ホット・スタンバイとして使用されるマルチマスター・レプリケーション・スキームにLRUエージングを実装すると、LRUエージングで予期しない結果が発生する可能性があります。エージングがローカルで行われるため、フェイルオーバー後に必要なデータの一部が失われる場合があります。