dポイントプレゼントキャンペーン実施中!

Oracle10gを使っています
OracleTextの索引はレコードの挿入や更新では自動的に更新されないとのことですが、それではどのタイミングで更新するのが適当なのでしょうか?
サーバーの性能にも左右されるのでしょうが、できればレコードの挿入等の度に索引の再構築をしたいのですがパフォーマンスに問題ありでしょうか。
ちなみに、テーブルは1つ、索引をつけているカラムは6つ、それぞれ500文字程度の日本語、1時間に10件程度のレコード挿入です。挿入のたびに
BEGIN
CTX_DDL.sync_index('索引名');
END;
を実行します。
また、再構築が同時に発生した場合はなにが起こるのでしょうか。

分かりにくい文章で申し訳ございません。テスト環境がないため本番環境で開発しているので自分で試してみることができず困っています。よろしくお願いします。

A 回答 (1件)

Oracle Database 10g であれば、ON COMMITでの索引同期化が使えるのではないでしょうか。



ON COMMIT での索引同期化は、CREATE INDEX の PARAMETERS 句の SYNC オプションで指定できます。

既存の索引に対しては、
ALTER INDEX <索引名> REBUILD PARAMETERS ('REPLACE METADATA SYNC (ON COMMIT)');
で、同期化モードを変更できます。

これで、元表に対する更新処理が COMMIT されたタイミングで、索引情報も更新されるようになります。

同期化モードを、元の手動に戻すには、
ALTER INDEX <索引名> REBUILD PARAMETERS ('REPLACE METADATA SYNC (MANUAL)');
とします。


ただし、ON COMMIT での索引同期化では、索引が極端に断片化する可能性があります。

Oracle Text では、$I と呼ばれる内部表を用いて索引情報を管理しています。

新規に追加・更新されたレコードの索引情報は、この $I 表に新規に INSERT されます。(UPDATE ではなく、INSERT です。)

このため、索引の同期化を繰り返すうちに、索引が次第に断片化していきます。

このあたりの動作は、OTNオンデマンドの「Oracle Text 概要」という資料で説明されています。
http://www.oracle.com/technetwork/jp/content/ind …
http://www.oracle.com/technetwork/jp/content/ora …
→ p.9「索引メンテナンス ~ 新規文書情報の追加」

索引が断片化すると、検索パフォーマンスが劣化するため、索引の同期化処理は、要件が許す限り、頻度を低くすることが望ましいと考えられます。

また、索引が断片化してしまった場合には、索引を最適化すれば、検索パフォーマンスを回復させることができます。(同 p.10、p.12)


テスト環境が無いとのことですが、その気になれば、手元のパソコンにWindows版のOracle Databaseをインストールすることもできるのではないでしょうか。テスト環境であれば、物理メモリが 1 GB もあれば十分です。

なお、テスト目的でのインストールであれば、ライセンス上の問題はありません。実際、「Oracle Technology Network Developer License Terms」には以下のように記載されています。

We grant you a nonexclusive, nontransferable limited license to use the programs only for the purpose of developing, testing, prototyping and demonstrating your application, and not for any other purpose.
http://www.oracle.com/technetwork/licenses/stand …

以上、ご参考になれば幸いです。

参考URL:http://www.oracle.com/technetwork/jp/content/ind …
    • good
    • 0
この回答へのお礼

詳しいご回答ありがとうございます。
ON COMMIT、うまく動作しました。感激です。検索パフォーマンスについても了解しました。負荷が少なくなる深夜にでもバッチで最適化してみようと思います。あとはレコードの新規・更新のたびにインデックスの作成をすることによる負荷が気になるところです。
テスト環境の件ですが、ORACLEXEというものをインストールしてみました。テスト環境もできたことですし、いろいろ試してみようと思います。

お礼日時:2011/02/11 17:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!