ヘッダーをスキップ
Oracle® Textアプリケーション開発者ガイド
12cリリース1 (12.1)
B71317-04
  目次へ移動
目次
索引へ移動
索引

前
次
 

索引付けのパフォーマンスに関するFAQ(よくある質問)

この項では、索引付けのパフォーマンスに関してよくある質問と、それに対する回答を提供します。

索引付けにはどのくらいの時間が必要ですか。

回答: テキストの索引付けは、リソース集中型の処理です。索引付けの速度は関連するハードウェアの性能に依存します。索引付けの速度はCPUおよびI/O容量により異なります。元のデータの読込みや索引エントリの書込みに十分なI/O容量がある場合、CPUが制限要素となります。

Intel x86(Core 2アーキテクチャ、2.5GHz)CPUを使用したテストでは、Oracle Textでは1日当たりCPUコアごとに約100GBのテキストを索引付けできました。CPUのクロック速度が増すかCPUアーキテクチャがさらに効率的(あるいはその両方)になると、処理量が増えることが予想されます。

ドキュメント形式、データの場所、ユーザー定義データストアのコール、フィルタ、レクサーなどのその他の要因も、索引付けの速度に影響します。

どの索引メモリー設定を使用すればよいですか。

回答: 索引メモリーは、システム・パラメータDEFAULT_INDEX_MEMORYおよびMAX_INDEX_MEMORYを使用して設定できます。また、CREATE INDEXのパラメータ文字列にmemoryパラメータを指定して、索引メモリーを実行時に設定することもできます。

DEFAULT_INDEX_MEMORY値は、ページングが発生しない範囲で、できるだけ高く設定するようにします。

SORT_AREA_SIZEシステム・パラメータを増やして、索引付けのパフォーマンスを向上させることもできます。

索引メモリーの設定を大きくすることをお薦めします。数百MBまで設定を大きくすると、索引付けの速度が上がり、最終的な索引の断片化が減少します。ただし、索引メモリー設定を高くしすぎると、メモリーのページングが発生し、索引付けの速度が低下します。

索引のパラレル作成では、各プロセスがそれぞれ索引付け用のメモリーを必要とします。巨大な表を扱う場合には、索引作成時と検索時とで、システム・グローバル領域(SGA)のチューニング方法を変えます。問合せでは、システム・グローバル領域(SGA)のブロック・バッファ・キャッシュにできるだけ多くの情報をキャッシュするようにします。このため、ブロック・バッファ・キャッシュには大量のメモリーを割り当てる必要があります。ただし、この設定は索引付けには影響を与えないため、索引作成時には、SGAのサイズを減らして、索引付け処理中の索引メモリー設定を大きくする方が賢明です。

SGAのサイズはOracle Database初期化ファイルで設定します。

関連項目:

  • Oracle Textのシステム・パラメータの詳細は、『Oracle Textリファレンス』を参照してください。

  • SGA関連パラメータの設定方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

  • メモリー割当てとSORT_AREA_SIZEパラメータの設定方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

索引付けにはどの程度のディスク・オーバーヘッドが必要ですか。

回答: オーバーヘッド(索引表に必要な領域の量)は、元のテキスト量の50%から200%までの範囲で様々です。一般に、テキストの総量が多いほどオーバーヘッドは小さくなりますが、小さなレコードが多数あるほうが、大きなレコードが少数あるよりもオーバーヘッドの消費が大きくなります。また、電子メールや討論記録のような未処理のデータにはスペルミスや略語などの特異なワードが数多く含まれている可能性が高いため、クリーンなデータ(出版されたテキストなど)のほうが未処理のデータよりも必要なオーバーヘッドが小さくなります。

テキストのみの索引は、テキストとテーマを組み合せた索引よりも小さくなります。プリフィックス索引およびサブストリング索引では、索引がかなり大きくなります。

データの形式は索引付けにどのように影響しますか。

回答: Microsoft Wordファイルのように形式設定されたドキュメントの場合は、ドキュメントに含まれる実際のテキストに比べてサイズが大きくなる傾向があるため、記憶域オーバーヘッドはかなり低くなります。したがって、1GBのWordドキュメントに必要な索引領域が50MBのみであるのに対し、1GBのプレーン・テキストに必要な索引領域は500MBになることがあります。

索引付けに要する時間については、これほど単純ではありません。索引付け対象のテキスト量が減れば明らかな影響は出ますが、索引付けに要する時間を見積るためには、AUTO_FILTERフィルタまたはその他のユーザー定義フィルタを使用してドキュメントをフィルタ処理する時間を相殺することが必要になります。

パラレル索引付けにより、パフォーマンスは向上しますか。

回答: データが大量にあり、CPUも複数ある場合は、パラレル索引付けにより、索引付けのパフォーマンスが向上します。

索引を作成するときに、次のようにPARALLELキーワードを使用します。

CREATE INDEX index_name ON table_name (column_name) 
INDEXTYPE IS ctxsys.context PARAMETERS ('...') PARALLEL 3;

これで、リソースに応じて最大3つの索引付けプロセスを使用して索引が作成されます。

また、パラレル索引付けを使用して、パーティション表のローカル・パーティション索引を作成することもできます。ただし、CPUが複数あるときのみ、索引付けのパフォーマンスは向上します。

注意:

ローカル・パーティション索引を作成するのにPARALLELを使用すると、パラレル問合せが有効になります。(非パーティション索引をパラレルに作成しても、問合せはパラレルに処理されません。)

パラレル問合せは、特に負荷の大きいシステムに対して実行すると、問合せのスループットが低下します。このため、パラレル索引作成後はパラレル問合せを使用禁止にすることをお薦めします。この場合は、ALTER INDEX NOPARALLELを使用します。

ローカル・パーティション索引を作成する場合、索引のパフォーマンスを改善するにはどうすればよいですか。

回答: CPUが複数あるときは、ローカル索引をパラレルで作成することで索引付けのパフォーマンスを改善できます。索引付けをパラレルで行うには、次の2つの方法があります。

ローカル・パーティション索引をパラレルで作成するには、次の2つの方法があります。

  • CREATE_INDEXで、LOCAL句とともにPARALLEL句を使用します。この場合、最大並列度はユーザーが持つパーティションの数によって制限されます。

  • UNUSABLEの索引を作成してから、DBMS_PCLXUTIL.BUILD_PART_INDEXユーティリティを実行します。この方法により、特にパーティションより多くのCPUを使用している場合に、並列性が高くなります。

2つ目の方法の例を次に示します。この例の元表には3つのパーティションがあります。まず使用禁止のローカル・パーティション索引を作成してから、DBMS_PCLUTIL.BUILD_PART_INDEXを実行すると、3つのパーティションがパラレルに作成されます(パーティション間並列性)。また、各パーティション内では、索引作成が並列度2でパラレルに実行されます(パーティション内並列性)。

create index tdrbip02bx on tdrbip02b(text) 
indextype is ctxsys.context local (partition tdrbip02bx1, 
                                   partition tdrbip02bx2, 
                                   partition tdrbip02bx3) 
unusable; 

exec dbms_pclxutil.build_part_index(3,2,'TDRBIP02B','TDRBIP02BX',TRUE); 

索引付けがどの程度完了したかはどうすればわかりますか。

回答: CTX_OUTPUT.START_LOGプロシージャを使用すると、索引付けプロセスからの出力を記録できます。ファイル名は、通常$ORACLE_HOME/ctx/logに書き込まれますが、CTX_ADM.SET_PARAMETERLOG_DIRECTORYパラメータを使用してディレクトリを変更できます。

関連項目:

このプロシージャの使用方法の詳細は、『Oracle Textリファレンス』を参照してください。