TimesTen Classicでの時間ベースのエージング

時間ベースのエージングでは、エージング・ポリシーの指定されたデータ存続期間および頻度に基づいて、キャッシュ・グループからデータが削除されます。時間ベースのエージングは、TimesTen Classicのすべてのキャッシュ・グループ・タイプに対して定義できます。

データ存続期間は、表内のデータの最小経過期間を定義します。時間の比較はタイムスタンプに基づいているため、データは指定された存続期間より長くなるまでエージングの候補にはならない場合があります(ただし、指定された存続期間より短くなりません)。

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

Oracle Databaseの場合:

AWTキャッシュ・グループにキャッシュされるOracle Database表の定義の例は、次のとおりです。Oracle Database表は、スキーマ・ユーザーsalesが所有しています。

CREATE TABLE orders
(ord_num      NUMBER(10) NOT NULL PRIMARY KEY,
 cust_num     NUMBER(6) NOT NULL,
 when_placed  DATE NOT NULL,
 when_shipped DATE NOT NULL);

CREATE TABLE order_item
(orditem_id NUMBER(12) NOT NULL PRIMARY KEY,
 ord_num    NUMBER(10),
 prod_num   VARCHAR2(6),
 quantity   NUMBER(3));

Oracleキャッシュ管理ユーザーには、キャッシュされた表に対するSELECTINSERTUPDATEおよびDELETE権限が付与されている必要があります。この例では、表はsales.orders表とsales.order_item表です。

様々なアクティビティに必要なすべての権限は、「キャッシュ処理のキャッシュ管理ユーザーに必要な権限」を参照してください。

Oracle Databaseで、管理者として次の権限を付与します:

SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON sales.orders TO cacheadmin;
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON sales.order_item TO cacheadmin;

TimesTenデータベースの場合:

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

CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP ordered_items
FROM sales.orders
 (ord_num      NUMBER(10) NOT NULL,
  cust_num     NUMBER(6) NOT NULL,
  when_placed  DATE NOT NULL,
  when_shipped DATE NOT NULL,
  PRIMARY KEY(ord_num))
AGING USE when_placed LIFETIME 45 DAYS CYCLE 60 MINUTES ON,
sales.order_item
 (orditem_id NUMBER(12) NOT NULL,
  ord_num    NUMBER(10),
  prod_num   VARCHAR2(6),
  quantity   NUMBER(3),
  PRIMARY KEY(orditem_id),
  FOREIGN KEY(ord_num) REFERENCES sales.orders(ord_num));

現在のシステム・タイムスタンプとsales.orders表のwhen_placed列のタイムスタンプの差に基づいて45日を超えるキャッシュ・インスタンスは、エージングの対象となります。エージング・プロセスによって60分ごとにチェックが行われ、キャッシュ表から自動的にエージ・アウトまたは削除できるキャッシュ・インスタンスがあるかどうかが確認されます。

AGING USE句には、時間ベースのエージングに使用される、NULLを指定できないTIMESTAMP列またはDATE列の名前が必要です。この列は、タイムスタンプ列と呼ばれます。

各行のタイムスタンプ列の値には、その行が最後に挿入または更新された日付と時刻が保存されます。タイムスタンプ列の値は、アプリケーションによって保持されます。この列の値が不明な特定の行があり、それらの行を表からエージ・アウトしないときは、デフォルト値を大きくしてタイムスタンプ列を定義します。

タイムスタンプ列に索引を作成すると、エージング・プロセスのパフォーマンスを最適化できます。

追加された列はNULLを指定できない列として定義できないため、既存の表に列を追加して、その列をタイムスタンプ列として使用することはできません。定義された時間ベースのエージング・ポリシーが含まれている表からタイムスタンプ列を破棄することはできません。

存続期間は、AGING USE句のLIFETIMEキーワードの後に日、時間、分または秒の単位で指定します。

タイムスタンプ列の値は、現在のシステム・タイムスタンプから差し引かれます。結果は指定した存続期間の単位(日、時間、分、秒)まで切り捨てられ、指定した存続期間の値との比較が行われます。その結果が存続期間の値より大きい場合、行はエージングの対象となります。

CYCLEキーワードの後に、エージングが発生する頻度を日、時間、分または秒の単位で指定します。デフォルトのエージング・サイクルは5分です。エージング・サイクルに0(ゼロ)を指定した場合、連続的にエージングが行われます。

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

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

  • ルート表を指定し、SET AGING LIFETIME句を使用して、存続期間を変更します。

  • ルート表を指定し、SET AGING CYCLE句を使用して、エージング・サイクルを変更します。

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

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

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

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