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キャッシュ管理ユーザーには、キャッシュされた表に対するSELECT
、INSERT
、UPDATE
および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エージング・ポリシーを追加します。
自動リフレッシュを使用したキャッシュ・グループでエージング・ポリシーを追加、変更または削除する前に、キャッシュ・エージェントを停止する必要があります。