表の理解
TimesTenの表は、共通の書式または構造を持つ行で構成されています。この書式は、表の列で定義します。
次の項では、表とその列およびこれらの管理方法について説明します。
表の概要
この項の内容は次のとおりです。
列の概要
表に列を作成する場合、列名の大文字と小文字は区別されます。
各列には、次の値が設定されています。
-
データ型
-
NULL値可能、主キーおよび外部キーのプロパティ(オプション)
-
オプションのデフォルト値
列は、NOT NULL
と明示的に宣言しないかぎり、NULL値可能になります。表の列がNULL値可能の場合は、その列にNULL
値を保存できます。そうでない場合は、表内の各行でその列にNULL
以外の値を設定する必要があります。
TimesTenの列の書式は変更できません。列の追加や削除は可能ですが、列の定義は変更できません。列を追加または削除するには、ALTER TABLE
文を使用します。列の定義を変更するには、まずアプリケーションで表を削除し、新しい定義で再作成する必要があります。
インライン列およびアウトライン列
表の行のインメモリー・レイアウトは、行への高速アクセスを可能にし、無駄な領域が最小限になるように設計されています。TimesTenでは、表のVARBINARY
、NVARCHAR2
およびVARCHAR2
の各列がインラインまたはアウトラインのいずれかに指定されます。
-
インライン列は固定長です。表内のすべての固定長列の値は、行単位で保存されます。
-
(アウトライン列とも呼ばれる)非インライン列は可変長です。データ型が
VARCHAR2
、NVARCHAR2
またはVARBINARY
の列には、アウトラインで保存されるものがあります。アウトライン列は、行に近接して保存されるのではなく、行に割り当てられます。TimesTenではデフォルトで、宣言された列の長さが128バイトを超えるVARCHAR2
、NVARCHAR2
およびVARBINARY
の列は、アウトラインで保存されます。さらにすべてのLOBデータ型もアウトラインで保存されます。TimesTenではデフォルトで、宣言された列の長さが128バイト以下の可変長の列は、インラインで保存されます。
インライン列ではなくアウトライン列で実行されるほとんどの処理はわずかに遅くなります。インライン列ではなくアウトライン列を使用する際にパフォーマンスに関して考慮する事項がいくつかあります。
-
TimesTenは、アウトライン列からデータを行を連続して保存しないため、データへのアクセスは遅くなります。
-
TimesTenは、より多くのロギング操作を生成するため、データの移入が遅くなります。
-
TimesTenは、より多くの再利用操作およびロギング操作を実行するため、データの削除が遅くなります。大量の行(100,000以上)を削除する場合は、複数のより小さい
DELETE FROM
文またはDELETE FIRST
句を使用することを検討してください。詳細は、「大量のDELETE文の回避」を参照してください。
行のインライン部分およびアウトライン部分の最大サイズは、「ttIsqlのtablesizeコマンドの使用」にリストされています。
デフォルトの列値
表の作成時に、デフォルトの列値を指定できます。指定するデフォルト値は、列のデータ型と互換性がある必要があります。
列には、次のいずれかのデフォルト値を指定できます。
-
NULL
(すべてのデータ型の列) -
定数値
-
SYSDATE
(DATE
列およびTIMESTAMP
列) -
USER
(CHAR
列) -
CURRENT_USER
(CHAR
列) -
SYSTEM_USER
(CHAR
列)
CREATE TABLE
文のDEFAULT
句を使用し、1つ以上の列のデフォルト値を指定しなかった場合、これらの列のデフォルト値は、NULL
になります。『Oracle TimesTen In-Memory Database SQLリファレンス』のCREATE TABLEを参照してください。
表名
TimesTenの表は、所有者名および表名によって一意に識別されます。
すべての表に所有者が存在します。デフォルトでTimesTenは、表を作成したユーザーを所有者に定義します。TimesTenが作成したシステム表などの表の所有者名は、SYS
またはTTREP
です。
表を一意に参照するには、MARY.PAYROLL
などのように表の所有者名と表名をピリオド「.」で区切って指定します。所有者を指定しなかった場合、TimesTenは、コール元のユーザー名の下にある表を検索し、次にユーザー名SYS
の下にある表を検索します。
名前は、文字で始まる英数字の値です。名前には、アンダースコアを使用できます。表名の長さは、最大30文字です。所有者名の長さも、最大30文字です。TimesTenでは、すべての表名、列名および所有者名が大文字で表示されます。『Oracle TimesTen In-Memory Database SQLリファレンス』の名前、ネームスペースおよびパラメータを参照してください。
表へのアクセス
アプリケーションは、表にSQL文を介してアクセスします。TimesTen問合せオプティマイザは、表にアクセスする最適な方法を自動的に選択します。
既存の索引を使用するか、必要に応じて一時索引を作成してアクセスの高速化します。一時索引の自動作成および自動破棄を行うとパフォーマンスのオーバーヘッドが発生するため、パフォーマンスを向上させるには、頻繁に検索する列に対して、アプリケーションで索引を明示的に作成する必要があります。詳細は、「文のチューニングと索引の使用」を参照してください。オプティマイザ・ヒント(文またはトランザクション・レベル)を使用して、特定のアプリケーションのTimesTen実行計画を調整できます。オプティマイザ・ヒントの詳細は、「オプティマイザ・ヒントの使用による実行計画の変更」を参照してください。
主キー、外部キーおよび一意索引
1つ以上の列に主キーを作成して、それらの列で重複値が拒否されるように設定できます。
主キー列は、NOT NULL
として宣言する必要があります。1つの表に設定可能な主キーは1つのみです。TimesTenは、主キーに対して範囲索引を自動的に作成して、主キーに一意性を適用し、主キーを介してアクセス速度を向上します。行を挿入すると、範囲索引をハッシュ索引に変更する場合を除き、主キー列を変更できなくなります。
ノート:
索引の詳細は、「索引の理解」を参照してください。
1つの表に設定可能な主キーは1つのみですが、一意索引を使用すると、一意性に関するプロパティを表に追加できます。Oracle TimesTen In-Memory Database SQLリファレンスのCREATE INDEXを参照してください。
ノート:
主キー列はNOT NULL
である必要がありますが、一意索引はNOT NULL
として宣言された列に対して作成できます。
また、表には、別の表の行に対応する行を持つ1つ以上の外部キーを設定できます。外部キーは、他方の表の主キーまたは一意に索引付けされた列に関連付けられています。外部キーは、参照先列に対して範囲索引を使用します。『Oracle TimesTen In-Memory Database SQLリファレンス』のCREATE TABLEを参照してください。
TimesTen Scaleoutの表
TimesTen Scaleoutでは、表は、データベースのデータを分散する方法を定義するために使用するオブジェクトです。
TimesTen Scaleoutは、この定義された表の分散スキームに従ってデータの分散を管理します。作成した表は、データベースのすべての要素に存在します。表のデータ行は、データベースの様々な要素に存在します。『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』の表の処理を参照してください。
システム表
TimesTenのデータベースには、アプリケーションで作成された表のみでなく、システム表も含まれています。システム表には、TimesTenメタデータ(データベース内のすべての表および索引の定義など)およびその他の情報(オプティマイザ計画など)が保存されています。アプリケーションでは、ユーザー表の場合と同様にシステム表を問い合せることができます。アプリケーションは、システム表を直接更新できません。TimesTenのシステム表の詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』のシステム表およびビューの章を参照してください。
ノート:
TimesTenのシステム表のフォーマットは、TimesTenのリリース間で変更される場合があります。
表の処理
ユーザーは、表の作成、削除または管理の操作を実行するには適切な権限が必要です。
『Oracle TimesTen In-Memory Database SQLリファレンス』のSQL文の章を参照してください。
この項の内容は次のとおりです。
表の作成
表を作成するには、SQL文CREATE TABLE
を使用します。
すべてのSQL文の構文については、『Oracle TimesTen In-Memory Database SQLリファレンス』のSQL文を参照してください。TimesTenでは、表名が大文字に変換されます。
次のSQL文の例によって、2つの異なるデータ型のcust_id
およびcust_name
という2つの列を持つcustomer
という表が作成されます。
Command> CREATE TABLE customer (cust_id TT_INTEGER, cust_name VARCHAR2(50));
この例では、ハッシュ索引を持つcustomer
という表を作成します。customer表には、cust_id
、cust_name
、addr
、zip
およびregion
の列があります。cust_id
列が主キーとして指定されているため、「主キー、外部キーおよび一意索引」で説明しているとおり、表内のその行は、行のCustId
値で一意に識別されます。
UNIQUE HASH ON
custId
PAGES
値は、ハッシュ索引に30ページあることを示しています。つまり、この表の予想行数は30 * 256 = 7680です。表の行数がこれより大幅に多くなると、パフォーマンスが低下する場合があり、ハッシュ索引のリサイズが必要になります。
『Oracle TimesTen In-Memory Database SQLリファレンス』のALTER TABLEの項でSET PAGES
を参照してください。「ハッシュ索引サイズの適切な設定」を参照してください。
Command> CREATE TABLE customer (cust_id NUMBER NOT NULL PRIMARY KEY, cust_name CHAR(100) NOT NULL, addr CHAR(100), zip NUMBER, region CHAR(10)) UNIQUE HASH ON (cust_id) PAGES = 30;
表サイズの見積り
TimesTenデータベースのサイズの増加は、最初の接続時に行うことができます。
データベースのサイズを変更する必要をなくすには、データベースの最終的なサイズを少なく見積もらないようにする必要があります。表のサイズの見積りには、ttSize
ユーティリティを使用します。
次の例は、ttSize
ユーティリティによる行数、インライン行のバイト数、表の索引のサイズおよび表の合計サイズの見積りを示します。
% ttSize -tbl pat.tab1 mydb Rows = 2 Total in-line row bytes = 17524 Indexes: Index PAT adds 6282 bytes Total index bytes = 6282 Total = 23806
既存の表のサイズは、ttIsql tablesize
コマンドでも計算できます。「ttIsqlのtablesizeコマンドの使用」を参照してください。
表へのエージング・ポリシーの実装
データベース内の1つ以上の表に対してエージング・ポリシーを定義できます。
エージング・ポリシーとは、エージングのタイプ、属性および状態(ON
またはOFF
)のことです。使用状況ベースまたは時間ベースのいずれかのタイプのエージング・ポリシーを指定できます。使用状況ベースのエージングでは、指定したデータベースの使用範囲内の最低使用頻度(LRU)のデータが削除されます。時間ベースのエージングでは、指定したデータ存続期間およびエージング・プロセスの頻度に基づいてデータが削除されます。指定した表に対して定義できるエージングのタイプは1つのみです。
CREATE TABLE
文を使用して、新しい表のエージング・ポリシーを定義できます。既存の表にエージング・ポリシーが定義されていない場合は、ALTER TABLE
文を使用してその表にエージング・ポリシーを追加できます。エージング・ポリシーは、エージング・ポリシーを破棄したり、新しいエージング・ポリシーを追加することによって変更できます。
次のタイプの表にはエージングを指定できません。
-
グローバル一時表
-
マテリアライズド・ビューのディテール表
キャッシュ・グループにエージングを実装することもできます。『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』のTimesTen Classicの場合のキャッシュ・グループでのエージングの実装を参照してください。
ノート:
TimesTen Scaleout内の表にエージング・ポリシーを指定する機能はサポートされていません。『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』のTimesTen ScaleoutとTimesTen Classicの比較を参照してください。
この項の内容は次のとおりです。
使用状況ベースのエージング
使用状況ベースのエージングを使用すると、最低使用頻度(LRU)のデータを削除することによって、データベースで使用されるメモリーの量を、指定したしきい値の範囲内で管理できます。
CREATE TABLE
文のAGING LRU
句を使用して、新しい表のLRUエージングを定義します。エージングの状態がON
の場合、エージングは自動的に開始されます。
ALTER TABLE
文を使用して、次のタスクを実行できます。
-
ALTER TABLE
文をSET AGING
{ON
|OFF
}句とともに使用して、エージング・ポリシーが定義されている表のエージングの状態を有効または無効にします。 -
ALTER TABLE
文をADD AGING LRU
[ON
|OFF
]句とともに使用して、LRUエージング・ポリシーを既存の表に追加します。 -
ALTER TABLE
文をDROP AGING
句とともに使用して、表のエージングを破棄します。
エージングの開始をスケジュールするには、ttAgingScheduleNow
組込みプロシージャをコールします。「エージング開始のスケジュール」を参照してください。
最後のエージング・サイクル以降に行へのアクセスまたは行の参照を行った場合、その行はLRUエージングの対象ではなくなります。行は、次のいずれかの条件に当てはまる場合にアクセスまたは参照されたとみなされます。
-
行が挿入された。
-
行が
SELECT
文の結果セットを作成するために使用された。 -
行に、更新フラグまたは削除フラグが設定されている。
-
行が
INSERT SELECT
文の結果セットを作成するために使用された。
表のエージングをLRUから時間ベースに変更するには、まず、DROP AGING
句とともにALTER TABLE
文を使用して表のエージングを破棄します。次に、ADD AGING USE
句とともにALTER TABLE
文を使用して時間ベースのエージングを追加します。
ノート:
LRUエージングを破棄するか、またはコマンドで参照される表にLRUエージングを追加すると、TimesTenによって、コンパイルされているコマンドが無効とマークされます。これらのコマンドは、再コンパイルする必要があります。
LRUエージング・ポリシーは2つあります。
-
使用中の永続メモリーの量に対して設定されたしきい値に基づくLRUエージング。これがデフォルトです。LRUエージングを使用するように表を作成(または変更)すると、LRUエージング・ポリシーは最初に使用中の永続メモリーのデフォルトしきい値を使用します。「使用中の永続メモリーのしきい値に基づくLRUエージングの定義」を参照してください。
-
表のセットの行しきい値に基づくLRUエージング。「表の行しきい値に基づくLRUエージングの定義」を参照してください。
どちらのタイプのLRUエージングも共存できます。行しきい値ベースのエージングは、使用中の永続メモリー・ベースのエージングより優先されます。行ベースのエージングが処理された後のサイクルごとに、現在の永続領域使用量が、使用中の永続メモリーしきい値エージングを使用する表のLRUエージングのしきい値として使用されます。
使用中の永続メモリーのしきい値に基づくLRUエージングの定義
使用中の永続メモリーの量に対して設定されたしきい値に基づいて、LRUエージングが実行されるように定義できます。
この方法では、PERM_IN_USE_SIZE
メトリックを使用して、すべての表のLRUエージングのしきい値を決定します。上限しきい値に達すると、TimesTenは、使用中の永続メモリーを減らすために、すべての表から行を削除します。
ttAgingLRUConfig
組込みプロシージャをコールして、LRUエージング属性を指定します。属性値は、LRUエージング・ポリシーが含まれているデータベース内のすべての表に適用されます。ttAgingLRUConfig
組込みプロシージャをコールしない場合は、属性のデフォルト値が使用されます。
次の表に、LRUエージング属性の概要を示します。
LRUエージング属性 | 説明 |
---|---|
|
LRUエージングが非アクティブになるデータベース |
|
LRUエージングがアクティブになるデータベース |
|
エージング・サイクルの間隔(分)。 |
LRUエージング・ポリシーの定義後、AgingCycle
に対して新しい値を設定すると、エージングは、その時点での時間および新しいサイクル時間に基づいて実行されます。たとえば、元のエージング・サイクルが15分で、LRUエージングが10分前に実行された場合、エージングは、5分後に再度実行されることになります。ただし、AgingCycle
パラメータを30分に変更すると、AgingCycle
で変更した値を使用してttAgingLRUConfig
プロシージャをコールした時点から30分後にエージングが行われます。
表の行しきい値に基づくLRUエージングの定義
表またはキャッシュ・グループがLRUエージングに対して有効化されると、ttAgingTableLRUConfig
組込みプロシージャを使用して、表のセットの行しきい値に基づいてLRUエージングが実行されるように構成できます。
使用中の永続メモリー・ベースのエージングにより、特定の表からデータが過剰にパージされる場合があります。このような表に行ベースのエージングを使用すると、より優れた領域管理を実現できます。ttAgingTableLRUConfig
組込みプロシージャを使用してLRUエージングを設定すると、指定した表の行に基づいて、および指定したキャッシュ・グループに適用されたときにキャッシュ・インスタンスに基づいて、しきい値が設定されます。表の行しきい値を設定することで、指定した表から削除される行数を制限できます。
どちらのタイプのLRUエージングも共存できます。表ベースのエージングは、使用中の永続メモリー・ベースのエージングより優先されます。したがって、ttAgingTableLRUConfig
組込みプロシージャで指定された属性で構成された表は、指定された行しきい値のみに基づいてエージングされます。行ベースのエージングが処理された後のサイクルごとに、現在の永続領域使用量が、使用中の永続メモリーしきい値エージングを使用する表のLRUエージングのしきい値として使用されます。
次の表に、LRUエージング属性の概要を示します。
親/子関係に表またはキャッシュ・グループ表がある場合は、親表を指定して、カスケード削除処理が正しく実行されることを確認します。
LRUエージング属性 | 説明 |
---|---|
|
TimesTen表またはキャッシュ・グループの所有者。 |
|
表の名前。 キャッシュ・グループのキャッシュ・ルート表を指定します。LRUエージングでは、子表から行が自動的に削除されます。 |
|
LRUエージングが非アクティブになる行の数。LRUエージングは、行数が表の |
|
LRUエージングがアクティブになる行の数。LRUエージングは、行数が表の |
|
エージング・サイクルの間隔(分)。デフォルトおよび動作は、 |
LowRowsThreshold
とHighRowsThreshold
の両方が0に設定されている場合、表ベースのLRUエージングはこの表に対して無効になります。この表のLRUエージングは、使用中の永続メモリーしきい値に基づくように切り替えられます。「使用中の永続メモリーのしきい値に基づくLRUエージングの定義」を参照してください。
Oracle TimesTen In-Memory DatabaseリファレンスのttAgingTableLRUConfigを参照してください。
次の例では、user1.table1
表の行のエージングしきい値を10K行の下限しきい値、100K行の上限しきい値に設定します。エージング・サイクルは、デフォルトで1分ごとに1回実行するように設定されます。
Command> Call ttAgingTableLRUConfig('user1', 'table1', 10000, 100000); < USER1, TABLE1, 10000, 100000, 1 > 1 row found.
次の例では、user1.table1
表の行のエージングしきい値を5K行の下限しきい値、12K行の上限しきい値に設定します。エージング・サイクルは、2分ごとに1回実行するように設定されます。
Command> Call ttAgingTableLRUConfig('user1', 'table1', 5000, 12000, 2); < USER1, TABLE1, 10000, 100000, 0 > 1 row found.
次の例では、下限および上限のしきい値を0に設定して、エージングを無効にします。
Command> Call ttAgingTableLRUConfig('user1', 'table1', 0, 0); < USER1, TABLE1, 0, 0, 1 > 1 row found.
スキーマ所有者および表名のみを使用して組込みプロシージャを実行すると、しきい値設定を取得できます。
Command> Call ttAgingTableLRUConfig('user1', 'table1'); < USER1, TABLE1, 10000, 100000, 1 > 1 row found.
時間ベースのエージング
時間ベースのエージングでは、指定したデータ存続期間およびエージング・プロセスの頻度に基づいてデータが表から削除されます。
CREATE TABLE
文のAGING USE
句を使用して、新しい表の時間ベースのエージング・ポリシーを指定できます。ALTER TABLE
文のADD AGING USE
句を使用して、既存の表に時間ベースのエージング・ポリシーを追加します。
AGING USE
句にはColumnName
引数があります。ColumnName
は時間ベースのエージングに使用する列名で、タイムスタンプ列とも呼ばれます。タイムスタンプ列は次のように定義する必要があります。
-
ORA_TIMESTAMP
、TT_TIMESTAMP
、ORA_DATE
またはTT_DATE
データ型 -
NOT NULL
使用しているアプリケーションによって、タイムスタンプ列の値が更新されます。いくつかの行でこの列の値が不明な場合に、それらの行がエージングされないようにするには、その列のデフォルト値を大きい値に定義します。タイムスタンプ列に索引を作成すると、エージング・プロセスのパフォーマンスを向上できます。
ノート:
列を追加または変更してNOT NULL
に定義することはできないため、既存の表で列を追加または変更した後で、その列をタイムスタンプ列として使用することはできません。
時間ベースのエージング・ポリシーが含まれている表からタイムスタンプ列を破棄することはできません。
タイムスタンプ列のデータ型がORA_TIMESTAMP
、TT_TIMESTAMP
またはORA_DATE
である場合は、CREATE TABLE
文のLIFETIME
句に、日、時間または分単位で存続期間を指定できます。タイムスタンプ列のデータ型がTT_DATE
である場合は、日単位で存続期間を指定します。
タイムスタンプ列の値は、SYSDATE
から引かれます。結果は、指定した単位(分、時間、日)を使用して切り捨てられ、指定したLIFETIME
値と比較されます。結果がLIFETIME
値より大きい場合、その行はエージングの候補となります。
CYCLE
句を使用して、システムで行を確認し、指定した存続期間を超えたデータを削除する頻度を指定します。CYCLE
を指定しない場合、エージングは5分ごとに行われます。CYCLEに0(ゼロ)を指定した場合、エージングは継続して行われます。エージングは、状態がON
の場合、自動的に開始されます。
ALTER TABLE
文を使用して、次のタスクを実行します。
-
SET AGING
{ON
|OFF
}句を使用して、時間ベースのエージング・ポリシーが含まれている表のエージングの状態を有効または無効にします。 -
SET AGING CYCLE
句を使用して、時間ベースのエージング・ポリシーが含まれている表のエージング・サイクルを変更します。 -
SET AGING LIFETIME
句を使用して、存続期間を変更します。 -
ADD AGING USE
句を使用して、エージング・ポリシーが含まれていない既存の表に時間ベースのエージングを追加します。 -
DROP AGING
句を使用して、表のエージングを破棄します。
エージングの開始をスケジュールするには、ttAgingScheduleNow
組込みプロシージャをコールします。「エージング開始のスケジュール」を参照してください。
表のエージング・ポリシーを時間ベースのエージングからLRUエージングに変更するには、まず、表の時間ベースのエージングを破棄します。次に、ADD AGING LRU
句とともにALTER TABLE
文を使用して、LRUエージングを追加します。
表にLRUエージング・ポリシーを定義するには、次の2つの方法があります。
-
使用中の永続メモリーの割合に基づいて、データベース・レベルでLRUエージング・ポリシーを定義します。「使用中の永続メモリーのしきい値に基づくLRUエージングの定義」を参照してください。
-
表の行に基づいて、またはキャッシュ・グループの場合はキャッシュ・インスタンスに基づいて、表レベルでLRUエージング・ポリシーを定義します。「表の行しきい値に基づくLRUエージングの定義」を参照してください。
エージングおよび外部キー
外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。
-
LRUエージングが有効になっている間に子表内の行にアクセスした場合は、親行または子行のいずれも削除されません。
-
時間ベースのエージングが有効になっている場合に親表内の行がエージング・アウトの候補になると、親行およびそのすべての子が削除されます。
-
表で
ON DELETE CASCADE
が有効になっている場合、この設定は無視されます。
エージング開始のスケジュール
エージング処理をスケジュールするには、ttAgingScheduleNow
組込みプロシージャをコールします。
実行中のエージング・プロセスが存在しないかぎり、このプロシージャをコールするとすぐにエージング・プロセスは開始されます(存在する場合、そのエージング・プロセスが完了すると開始されます)。
ttAgingScheduleNow
をコールすると、状態がON
またはOFF
のいずれであるかに関係なく、エージング・プロセスが開始されます。
ttAgingScheduleNow
をコールしてもエージングの状態は変わらないため、これをコールした結果としてエージング・プロセスは1回のみ開始されます。ttAgingScheduleNow
のコール時にエージングの状態がOFF
の場合、エージング・プロセスは開始されますが、プロセスの完了後、エージングは継続されません。エージングを継続するには、ttAgingScheduleNow
を再度コールするか、またはエージングの状態をON
に変更する必要があります。
エージングの状態がすでにON
に設定されている場合は、ttAgingScheduleNow
がコールされた時間に基づいて、ttAgingScheduleNowによってエージング・サイクルがリセットされます。
SET AGING OFF
句とともにALTER TABLE
文を使用してエージングを無効にすると、外部でエージングを制御できます。その後、ttAgingScheduleNow
を使用して、目的の時間にエージングを開始します。
ttAgingScheduleNow
を使用して、このプロシージャのコール時に個々の表の名前を指定することによって、表のエージングを開始またはリセットします。表名を指定しない場合は、ttAgingScheduleNow
によって、エージングが定義されているデータベース内のすべての表のエージングが開始またはリセットされます。
エージングおよびレプリケーション
アクティブなスタンバイ・ペアの場合は、アクティブなマスター・データベースにエージングを実装します。
エージングの結果として行われる削除は、スタンバイ・マスター・データベースおよび読取り専用サブスクライバにレプリケートされます。スタンバイ・マスター・データベースに対してフェイルオーバーが行われると、エージングは、ロールがACTIVE
に変更された後でそのデータベースに対して有効になります。
他のすべてのタイプのレプリケーション・スキームの場合は、ノードごとに個別にエージングを実装します。エージング・ポリシーは、すべてのノードで同じである必要があります。
ホット・スタンバイとして使用されるマルチマスター・レプリケーション・スキームにLRUエージングを実装すると、LRUエージングで、意図していない結果になる可能性があります。エージングがローカルで行われるため、フェイルオーバー後に必要なデータの一部が失われる場合があります。
エージングの有効性の判断
エージングによって行が削除されると、TimesTenは空のページを解放し、フルでないページの空のスロットを再利用します。ttPageLevelTableInfo
組込みプロシージャでは、TimesTenが空のスロットを再利用して空のページを解放するか、新しいページが新しい行を格納するために割り当てられているかを判断するために、各表のページ割当てが表示されます。
次に、ttPageLevelTableInfo
組込みプロシージャを使用してuser1.table1
およびuser2.table2
に対して受信した出力を示します。
Command> vertical 1; Command> call ttPageLevelTableInfo; TBLOWNER: USER1 TBLNAME: TABLE1 CARD: 6 LOGICAL_PGCNT: 1 LOGICAL_NONFULLPAGES: 1 LOGICAL_FREESLOTS: 250 PHYSICAL_PGCNT: 2 PHYSICAL_NONFULLPAGES0: 0 PHYSICAL_NONFULLPAGES1: 0 PHYSICAL_NONFULLPAGES2: 1 PHYSICAL_NONFULLPAGES3: 1 PHYSICAL_FREESLOTS0: 0 PHYSICAL_FREESLOTS1: 0 PHYSICAL_FREESLOTS2: 253 PHYSICAL_FREESLOTS3: 253 TBLOWNER: USER2 TBLNAME: TABLE2 CARD: 3 LOGICAL_PGCNT: 1 LOGICAL_NONFULLPAGES: 1 LOGICAL_FREESLOTS: 253 PHYSICAL_PGCNT: 1 PHYSICAL_NONFULLPAGES0: 0 PHYSICAL_NONFULLPAGES1: 1 PHYSICAL_NONFULLPAGES2: 0 PHYSICAL_NONFULLPAGES3: 0 PHYSICAL_FREESLOTS0: 0 PHYSICAL_FREESLOTS1: 253 PHYSICAL_FREESLOTS2: 0 PHYSICAL_FREESLOTS3: 0 2 rows found.
Oracle TimesTen In-Memory DatabaseリファレンスのttPageLevelTableInfoを参照してください。