ストアード・プロシージャー検索を使用するには、CREATE INDEX コマンドの実行時にキャッシュ・オプションを指定する必要があります。 これにより、指定したデータがメイン・メモリーに移動され、 ハイパフォーマンスを実現できます。
ただし、検索のための最初の索引の更新の前に、 文書の入っていない表の索引の更新を行ってしまうことがないように、 表の中に文書があるか確認してください。 こうすることで、索引作成のパフォーマンスは向上し、 なおかつキャッシュ・メモリー要件をしっかりと予測することもできます。
ストアード・プロシージャー検索を使用すると、 文書に関連した定義済みデータを迅速に戻すことができます。 これを定義するには、CREATE INDEX コマンドで、 キャッシュ表オプションを使用します。 次に、ACTIVATE CACHE コマンドによって、 指定したデータをメモリー・キャッシュに移動します。
注 |
---|
このテキスト索引は、ビューに対して作成されたものでない限り、 SQL スカラー検索関数でも使用できます。 分散 DB2 環境では、 ストアード・プロシージャーのために単一ノード上の管理表の表スペースを明示的に指定し、 明示的にこのノードに接続しなければなりません。 適切なノードと接続するためには、DB2NODE 環境変数を使用します。 |
ストアード・プロシージャー検索用のテキスト索引を作成する際には、 次のパラメーターを決定し、計算しなければなりません。
以下のキャッシュのタイプを使用できます。
テキスト索引の更新は、次の方法で行えます。
これは、インクリメンタル更新とも呼ばれます。
最初の索引のアクティブ化以後に、文書の 50% 以上を挿入する場合は、 このオプションを使用してください。
Net Search Extender には、CREATE INDEX メモリー・パラメーターを決定するのに役立つ 2 つの SQL 関数があります。 それは、MAXIMUM CACHE SIZE 関数と PCTFREE 関数です。
DB2EXT.MAXIMUM_CACHE_SIZE(maximumNumberDocs INTEGER, averageRowLength INTEGER, numberOfCacheColumns INTEGER)
以下のコマンドは、 表の平均の行の長さのパラメーターを戻します。
SELECT AVG(LENGTH(cache column_1) + ... + LENGTH(cache column_n))
平均は、さらに文書を表に挿入するときに、大きく変わる場合があることに注意してください。 キャッシュ列の数は、DB2TEXT CREATE INDEX コマンドの CACHE TABLE 文節で使用した列式の数に関連しています。
詳細に関しては、付録 B, 大量のメモリーの使用を参照してください。
DB2EXT.PCTFREE(actualNumberDocs INTEGER, maximumNumberDocs INTEGER)
文書の実際数とは、 メモリー・キャッシュを作成する最初の ACTIVATE CACHE コマンド実行時の、 ユーザーの表の行数に相当します。
最大文書数とは、 次の DB2TEXT ACTIVATE コマンド (一時キャッシュの場合)、 または DB2TEXT ACTIVATE CACHE RECREATE コマンド (永続的キャッシュの場合) が実行される前の、 ユーザーの表における文書の最大予想数のことです。
更新のたびに索引を再作成する場合は、PCTFREE を 0 に設定してください。
例 |
---|
表に 10 000 行あるとします。 そして、20 000 行を超えることはないと予想しているものとします。 次の呼び出しを使用して、必要な PCTFREE 値を計算します。 db2 "values DB2EXT.PCTFREE(10000,20000) " 最大行サイズが 20 000 で、 キャッシュには 2 列あり、その平均サイズが 76 であるとします。 次の呼び出しを使用して、サイズを戻します。 db2 " values DB2EXT.MAXIMUM_CACHE_SIZE(20000,76,2) " |
適切なパラメーターを決定した後、 次の呼び出しを使用して、索引およびキャッシュ表を作成できます。
db2text CREATE INDEX db2ext.comment FOR TEXT ON db2ext.texttab (comment) CACHE TABLE (docid) PCTFREE 10 MAXIMUM CACHE SIZE 5
この例では、結果表を高速で戻すためにメイン・メモリーを使用して、 索引の他に docid 列が作成されます。 キャッシュ・メモリーの 10 % は、今後の文書のために予約され、 キャッシュの最大は、5 MB に制限されています。
この索引で検索するには、索引を更新してから、アクティブ化する必要があります。 これにより、指定した表キャッシュ式がデータベースからメモリーにコピーされます。
ACTIVATE または UPDATE の操作中に MAXIMUM CACHE SIZE に達した場合は、 以下の処置を実行することをお勧めします。
文書の頻繁な更新が予想される場合は、 CACHE TABLE 文節のキャッシュ列式に固定サイズ・データ・タイプを使用することを考慮してください。 以下の例は、更新操作時に同じキャッシュ記憶機構を使用する方法を示しています。
CACHE TABLE(cast(C1 as char(20)), cast(substr(C2,1,10) as char(10))....
この場合、必ず非変数データ・タイプのみを使用してください。
キャッシュをアクティブ化する前に、 不正確な PCTFREE 計算が行われないようにするために、 ペンディングになっているインクリメンタル更新を実行します。
テキスト索引をアクティブ化するには、以下のコマンドを使用します。
db2text ACTIVATE CACHE FOR INDEX db2ext.comment FOR TEXT
このコマンドによって、 指定したキャッシュ表データがデータベースから取り出され、メモリーに保管されます。 必要な時間は表のサイズによって異なります。
注 |
---|
索引がアクティブ化されているときに update index を呼び出すと、 キャッシュ表も更新されます。 削除した文書はキャッシュ・メモリーのスロットを消費する場合があるため、PCTFREE を十分大きな値に設定してください。 |
ACTIVATE CACHE 呼び出しは、 システムが停止されると、毎回再実行する必要があります。 永続キャッシュを使用すると、新たなアクティブ化を素早く行うことができます。
注 |
---|
永続キャッシュをアクティブ化していないときに更新を行うと、 永続キャッシュはドロップされ、 アクティブ化呼び出しのときに再作成されます。 |
リソースを節約するために、現在、 必要でないすべての索引を非アクティブ化する必要もあります。
残りメモリーをチェックするには、次の呼び出しを使用します。
db2text control show cache status for database cte index db2ext.comment
この呼び出しは、索引がアクティブ化されているかどうか、 指定したキャッシュ・スペースのうちのどのくらいの量が残っているかを表示します。