IBM Books
(C) IBM Corp. 2000

Net Search Extender 管理およびユーザーズ・ガイド

ストアード・プロシージャー検索で使用できるテキスト索引の作成

ストアード・プロシージャー検索を使用するには、CREATE INDEX コマンドの実行時にキャッシュ・オプションを指定する必要があります。 これにより、指定したデータがメイン・メモリーに移動され、 ハイパフォーマンスを実現できます。

ただし、検索のための最初の索引の更新の前に、 文書の入っていない表の索引の更新を行ってしまうことがないように、 表の中に文書があるか確認してください。 こうすることで、索引作成のパフォーマンスは向上し、 なおかつキャッシュ・メモリー要件をしっかりと予測することもできます。

ストアード・プロシージャー検索を使用すると、 文書に関連した定義済みデータを迅速に戻すことができます。 これを定義するには、CREATE INDEX コマンドで、 キャッシュ表オプションを使用します。 次に、ACTIVATE CACHE コマンドによって、 指定したデータをメモリー・キャッシュに移動します。

このテキスト索引は、ビューに対して作成されたものでない限り、 SQL スカラー検索関数でも使用できます。

分散 DB2 環境では、 ストアード・プロシージャーのために単一ノード上の管理表の表スペースを明示的に指定し、 明示的にこのノードに接続しなければなりません。

適切なノードと接続するためには、DB2NODE 環境変数を使用します。

ストアード・プロシージャー検索用のテキスト索引を作成する際には、 次のパラメーターを決定し、計算しなければなりません。

以下のキャッシュのタイプを使用できます。

一時キャッシュ
一時キャッシュは、 DB2TEXT ACTIVATE CACHE コマンドの実行ごとに再作成され、 DB2 表からメモリーへのデータのロードが必要となります。 これは、永続的キャッシュのアクティブ化より長い時間を取ります。 特に大きな索引の場合には顕著です。 しかし、検索のパフォーマンスは若干向上するかもしれません。

永続的キャッシュ
永続的キャッシュは、ディスク上に保守されていて、 各 DB2TEXT ACTIVATE CACHE コマンドでオペレーティング・システムにより素早くメモリーにマップされます。 インクリメンタル索引更新のシナリオでは、 永続的キャッシュを索引とキャッシュ間の同期を認めるようにアクティブ化する必要があります。 そうしない場合、 次の DB2TEXT ACTIVATE CACHE コマンドがキャッシュを最初から再作成します。

テキスト索引の更新は、次の方法で行えます。

更新のオプションに索引の再作成を指定しない方法
削除した文書のスロットはキャッシュで再利用できないので、 表への文書の削除および再挿入は避けてください。 したがって、アクティブ化された索引では、 キー列を変更しないようにする必要があります。

これは、インクリメンタル更新とも呼ばれます。

更新のオプションに索引の再作成を指定する方法
これは、更新するたびに索引を再作成する方法です。 可能な場合は、キャッシュ列の式で可変長データ・タイプを使用してください。 これにより、キャッシュ・スペースが節約できます。 また CACHE TABLE 文節には、対応するキャスト式を使用してください。

最初の索引のアクティブ化以後に、文書の 50% 以上を挿入する場合は、 このオプションを使用してください。

Net Search Extender には、CREATE INDEX メモリー・パラメーターを決定するのに役立つ 2 つの SQL 関数があります。 それは、MAXIMUM CACHE SIZE 関数と PCTFREE 関数です。

インクリメンタル更新および再作成更新
以下の UDF 関数は、 推奨される MAXIMUM CACHE SIZE 値をメガバイト (MB) で戻します。
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, 大量のメモリーの使用を参照してください。

インクリメンタル更新のみ
以下の UDF 関数は、実際の文書数、 および最大文書数に基づく推奨 PCTFREE 値を戻します。
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

この呼び出しは、索引がアクティブ化されているかどうか、 指定したキャッシュ・スペースのうちのどのくらいの量が残っているかを表示します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]