- ベストアンサー
OracleTextの索引再構築について
- OracleTextの索引を自動的に更新するタイミングはどのようにすればよいのか
- レコードの挿入や更新では自動的に更新されないため、適切なタイミングで索引を更新する必要がある
- テーブルに索引をつけているカラムは6つで、1時間に10件程度のレコードを挿入している
- みんなの回答 (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/index-154756-ja.html → http://www.oracle.com/technetwork/jp/content/oracle-text-100927-251051-ja.pdf → 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/standard-license-152015.html 以上、ご参考になれば幸いです。
お礼
詳しいご回答ありがとうございます。 ON COMMIT、うまく動作しました。感激です。検索パフォーマンスについても了解しました。負荷が少なくなる深夜にでもバッチで最適化してみようと思います。あとはレコードの新規・更新のたびにインデックスの作成をすることによる負荷が気になるところです。 テスト環境の件ですが、ORACLEXEというものをインストールしてみました。テスト環境もできたことですし、いろいろ試してみようと思います。