現在地: LANSA テクニカル リファレンスガイド > 3. テーブル > 3.6 テーブルの属性 > 3.6.14 IBM i 高速テーブル

3.6.14 IBM i 高速テーブル

「読み取り専用」の場合に、より高速にアクセスできるように対象のテーブル定義と関連のインデックスを高速の IBM i ユーザー索引にミラーリングするかどうかを指定します。

以下の各項目は、IBM i の高速テーブル機能についての基本情報です。この機能を使用する前に、必ずこれらの項目を読んで理解しておいてください。

例えば、40 個のデータベース・テーブルを開くような従来の商用アプリケーションでは、40 個のテーブルを開き、その後開いたままにしておくためのスペー スおよび時間には大幅なオーバーヘッドが存在します。

しかし、これらのテーブルのうち 20 個が高速テーブルとして実装された場合は、スペースと時間のオーバーヘッドが約 50 %に減少します。これによって、このアプリケーションのパフォーマンスは大幅に向上するはずです。高速テーブル索引は、IBM i の「プラットフォーム固有」のオプションです。他のプラッ トフォーム上では、「高速テーブル」フラグは無視されて他のテーブルと同様に実装されます。

これは設計上の考慮事項かもしれませんが、通常のデータベース管理機能を使用している他のプラットフォーム上では、あまり高速な IBM i のユーザー索引を使用しないでください。高速なユーザー索引を使用して改良し過ぎるとアプリケーションが機能しなくなる可能性があります。IBM i のユーザー索引機能の詳細とその用途については、IBM の Information Center に説明されています。既存の 3GL ベースのアプリケーション・プログラムから、この高速テーブルにアクセスすることも可能です。

デフォルト:NO (チェックなし/未選択)

使用規則

高速テーブルとして有効であるためには、テーブル定義が以下のルールに従っている必要があります。これらの項目の大部分は、テーブルの作成または変更を「実行可能」にする段階で検査されます。ルールに違反すると、該当のエラー・メッセージが表示されて、実行可能にする処理は失敗します。

これらのルールは、以下の基本的な物理テーブル定義とそれに対して定義されるインデックスすべてに適用されます。

要約すれば、高速テーブル機能とは、シンプルな検索とデコード型のテーブル用にのみ設計されたものであるということです。他の高度な方法で使用されるテーブルは、高速テーブルとして実装しないでください。

ヒントとテクニック

高速テーブルについてのよくある質問には、以下のようなものがあります。

質問:高速テーブルには、どのようなタイプのテーブルが適していますか?

一般的には、以下のような特性をもつデータベース・テーブルが、高速テーブルの実装に適していると言えます。

質問:高速テーブルのデータはどこに保管されますか?

高速テーブルとしてフラグの立っている LANSA テーブル定義も、他のテーブルと同様に設定されます。実際のテーブル・データは、この通常のテーブルに格納され維持管理されます。ただし、データはまた「読み取り専用」高速索引にミラーリングされ、「読み取り専用」アプリケーションから非常に高速にアクセスできるようになります。

この高速索引は、実際は IBM i のユーザー索引 (オブジェクト・タイプは *USRIDX) です。このユーザー索引は、現在の区画のモジュール (またはプログラム) ライブラリ内に自動的に作成され、そこに常駐している必要があります。この索引はユーザーが作成する必要はありませんが、定期的に削除し再作成することも可能です。このユーザー索引の例を探す際のポイントは、ユーザー索引に DC@TBLIDX という名前が付いているかどうかを見つけることです。

質問:高速索引のバックアップは必要ですか?

必要ありません。個々のテーブルにはそれぞれ関連するデータの実テーブルがあり、そこには「実」データが含まれているため、すべてのテーブルの高速索引を 組み込み関数のREBUILD_FILE_INDEXを使用して、ほんの数分で再作成することができます。

ただし、万一復元手順を呼び出す必要がある場合は、索引と「実」データを含む関連のデータベース・テーブルのすべてが同期しているバックアップがあれば、復元手順を簡略化して高速化できる場合があります。

質問:高速索引へのアクセスは、どのような場合に行われるのですか?

LANSA コード変換機能は、さまざま時点で、データベース・テーブルにアクセスするコードを生成する可能性があります。この生成が実行され、呼び出されるテーブルが高速テーブルである場合は、以下のような場合に、実テーブルの代わりに高速索引が実際にアクセスされます。

質問:高速テーブルで *DBOPTIMISE または *DBOPTIMIZE を使用できますか?

はい、ファンクションが高速テーブルを更新する場合を除いて、どのような場合でも可能です。高速テーブルを更新するファンクションは、テーブルへのすべての I/O を、関連する OAM を通じて行う必要があります。これにより、実データ・テーブルとミラーリングされた高速索引は、同時に更新されるようになります。

質問:高速索引の更新は、どのような場合に行われるのですか?

高速テーブルとしてフラグの立っているファイルに対して OAM が作成されると、テーブルに対して実行される挿入、更新、削除の回数をカウントするための補助的なコードが追加されます。

テーブルが閉じられる際にこのカウントが検査され、0 より大きければそのテーブルの既存のエントリーのすべてが高速索引から消去されます。次に、高速索引に新しいエントリーを挿入するために、実テーブル (およびそのビュー) 全体が読み取られます。

このアーキテクチャは、以下のような仕組みを持ち、また高速テーブルの使用に影響を与えます。

質問:「実」テーブルと索引との同期が取れていない状態になることはありますか?

前項の説明からもわかるように、テーブルとそのミラーリングされた高速索引との同期が取れていない状態になる可能性があります。例えば、あるファンクションが 1 つのテーブルに 3 つの新規エントリーを挿入した直後にエラーが発生したとします。この時点では、各新規エントリーは実テーブル内に格納されていますが、高速索引には反映されていません。

質問:同期が取れていない状態は、どのようにすれば修正することができますか?

テーブルとその高速索引との同期が取れていない場合に、それらを再度同期させるには、以下の処理を実行してください。

EXEC_OS400 CMD('DLTUSRIDX DC@TBLIDX')

USE BUILTIN(REBUILD_FILE_INDEX) WITH_ARGS('''*ALL''')

質問:テーブルのレイアウトを変更すると、どうなりますか?

テーブルのレイアウトを変更して変更を実行可能にすると、テーブルと索引との再同期が自動的に実行されます。この自動同期は、変更された定義を変更後に他のシステムにエクスポートした場合は実行されません。

質問:高速テーブルを他のシステムにインポートするとどうなりますか?

高速テーブルは、通常のテーブルと同様に他のシステムへインポートされます。しかし、テーブルのデータがインポートされた場合、またはテーブル・レイアウ トが変更された場合は、関連の索引は自動的に更新または再フォーマットされることはありません。索引の更新または再フォーマットを行うためには、前述した方法のいずれかを使用して、テーブルとその索引との「再同期」を起動してください。

注:1GB を超えるユーザー索引、または入力レコード長が 108 バイトを超えるユーザー索引は、OS/400 の V2R2M0 よりも前のリリースに保管することも、そこから復元することもできません。

警告

プラットフォームについて