LRU Aging in TimesTen Classic
LRU aging enables you to maintain the amount of memory used in a TimesTen database within a specified threshold by deleting the least recently used data. LRU aging can be defined for all cache group types except static cache groups with autorefresh enabled. LRU aging is defined by default on dynamic cache groups.
Define an LRU aging policy for a cache group by using the AGING LRU
clause in the cache table definition of the CREATE CACHE GROUP
statement. Aging occurs automatically if the aging state is set to its default of ON
.
The following example defines an LRU aging policy on the AWT cache group new_customers
:
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;
There are two LRU aging policies:
-
LRU aging based on set thresholds for the amount of permanent memory in use. This is the default. Once you create (or alter) a table to use LRU aging, the LRU aging policy defaults to using the default thresholds for permanent memory in use. See Defining LRU Aging Based on Thresholds for Permanent Memory in Use in the Oracle TimesTen In-Memory Database Operations Guide.
-
LRU aging based on row thresholds for a specified root tables of your cache groups. See Defining LRU Aging Based on Row Thresholds for Tables in the Oracle TimesTen In-Memory Database Operations Guide.
Both types of LRU aging can co-exist. Row threshold based aging takes precedence over permanent memory in use based aging.
If a row has been accessed or referenced since the last aging cycle, it is not eligible for LRU aging in the current aging cycle. A row is considered to be accessed or referenced if at least one of the following is true:
-
The row is used to build the result set of a
SELECT
or anINSERT ... SELECT
statement. -
The row has been marked to be updated or deleted in a pending transaction.
In a multiple-table cache group, if a row in a child table has been accessed or referenced since the last aging cycle, then neither the related row in the parent table nor the row in the child table is eligible for LRU aging in the current aging cycle.
The ALTER TABLE
statement can be used to perform the following tasks associated with changing or defining an LRU aging policy on a cache group:
-
Change the aging state of a cache group by specifying the root table and using the
SET AGING
clause. -
Add an LRU aging policy to a cache group that has no aging policy defined by specifying the root table and using the
ADD AGING LRU
clause. -
Drop the LRU aging policy on a cache group by specifying the root table and using the
DROP AGING
clause.
To change the aging policy of a cache group from LRU to time-based, use an ALTER TABLE
statement on the root table with the DROP AGING
clause to drop the LRU aging policy. Then use an ALTER TABLE
statement on the root table with the ADD AGING USE
clause to add a time-based aging policy.
You must stop the cache agent before you add, alter or drop an aging policy on a cache group with autorefresh.