表の理解

TimesTenの表は、共通の書式または構造を持つ行で構成されています。この書式は、表の列で定義します。

次の項では、表とその列およびこれらの管理方法について説明します。

表の概要

この項の内容は次のとおりです。

列の概要

表に列を作成する場合、列名の大文字と小文字は区別されます。

各列には、次の値が設定されています。

  • データ型

  • NULL値可能、主キーおよび外部キーのプロパティ(オプション)

  • オプションのデフォルト値

列は、NOT NULLと明示的に宣言しないかぎり、NULL値可能になります。表の列がNULL値可能の場合は、その列にNULL値を保存できます。そうでない場合は、表内の各行でその列にNULL以外の値を設定する必要があります。

TimesTenの列の書式は変更できません。列の追加や削除は可能ですが、列の定義は変更できません。列を追加または削除するには、ALTER TABLE文を使用します。列の定義を変更するには、まずアプリケーションで表を削除し、新しい定義で再作成する必要があります。

インライン列およびアウトライン列

表の行のインメモリー・レイアウトは、行への高速アクセスを可能にし、無駄な領域が最小限になるように設計されています。TimesTenでは、表のVARBINARYNVARCHAR2およびVARCHAR2の各列がインラインまたはアウトラインのいずれかに指定されます。

  • インライン列は固定長です。表内のすべての固定長列の値は、行単位で保存されます。

  • (アウトライン列とも呼ばれる)非インライン列は可変長です。データ型がVARCHAR2NVARCHAR2またはVARBINARYの列には、アウトラインで保存されるものがあります。アウトライン列は、行に近接して保存されるのではなく、行に割り当てられます。TimesTenではデフォルトで、宣言された列の長さが128バイトを超えるVARCHAR2NVARCHAR2および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_idcust_nameaddrzipおよび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表を破棄するには、SQL文DROP TABLEをコールします。

次の例では、表customerが削除されます。

Command> DROP TABLE customer;

表サイズの見積り

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エージングが実行されるように定義できます。

この方法では、PERM_IN_USE_SIZEメトリックを使用して、すべての表のLRUエージングのしきい値を決定します。上限しきい値に達すると、TimesTenは、使用中の永続メモリーを減らすために、すべての表から行を削除します。

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エージングの定義

表またはキャッシュ・グループがLRUエージングに対して有効化されると、ttAgingTableLRUConfig組込みプロシージャを使用して、表のセットの行しきい値に基づいてLRUエージングが実行されるように構成できます。

使用中の永続メモリー・ベースのエージングにより、特定の表からデータが過剰にパージされる場合があります。このような表に行ベースのエージングを使用すると、より優れた領域管理を実現できます。ttAgingTableLRUConfig組込みプロシージャを使用してLRUエージングを設定すると、指定した表の行に基づいて、および指定したキャッシュ・グループに適用されたときにキャッシュ・インスタンスに基づいて、しきい値が設定されます。表の行しきい値を設定することで、指定した表から削除される行数を制限できます。

どちらのタイプのLRUエージングも共存できます。表ベースのエージングは、使用中の永続メモリー・ベースのエージングより優先されます。したがって、ttAgingTableLRUConfig組込みプロシージャで指定された属性で構成された表は、指定された行しきい値のみに基づいてエージングされます。行ベースのエージングが処理された後のサイクルごとに、現在の永続領域使用量が、使用中の永続メモリーしきい値エージングを使用する表のLRUエージングのしきい値として使用されます。

次の表に、LRUエージング属性の概要を示します。

親/子関係に表またはキャッシュ・グループ表がある場合は、親表を指定して、カスケード削除処理が正しく実行されることを確認します。

LRUエージング属性 説明

tblOwner

TimesTen表またはキャッシュ・グループの所有者。

tblName

表の名前。

キャッシュ・グループのキャッシュ・ルート表を指定します。LRUエージングでは、子表から行が自動的に削除されます。

LowRowsThreshhold

LRUエージングが非アクティブになる行の数。LRUエージングは、行数が表のLowRowsThreshold行に達すると停止します。

HighRowsThreshhold

LRUエージングがアクティブになる行の数。LRUエージングは、行数が表のHighRowsThreshold行に達すると開始されます。

AgingCycle

エージング・サイクルの間隔(分)。デフォルトおよび動作は、ttAgingLRUConfig組込みプロシージャのAgingCycleと同じです。

LowRowsThresholdHighRowsThresholdの両方が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_TIMESTAMPTT_TIMESTAMPORA_DATEまたはTT_DATEデータ型

  • NOT NULL

使用しているアプリケーションによって、タイムスタンプ列の値が更新されます。いくつかの行でこの列の値が不明な場合に、それらの行がエージングされないようにするには、その列のデフォルト値を大きい値に定義します。タイムスタンプ列に索引を作成すると、エージング・プロセスのパフォーマンスを向上できます。

ノート:

列を追加または変更してNOT NULLに定義することはできないため、既存の表で列を追加または変更した後で、その列をタイムスタンプ列として使用することはできません。

時間ベースのエージング・ポリシーが含まれている表からタイムスタンプ列を破棄することはできません。

タイムスタンプ列のデータ型がORA_TIMESTAMPTT_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エージングが有効になっている間に子表内の行にアクセスした場合は、親行または子行のいずれも削除されません。

  • 時間ベースのエージングが有効になっている場合に親表内の行がエージング・アウトの候補になると、親行およびそのすべての子が削除されます。

  • 表で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を参照してください。