Oracle10gを使っています
OracleTextの索引はレコードの挿入や更新では自動的に更新されないとのことですが、それではどのタイミングで更新するのが適当なのでしょうか?
サーバーの性能にも左右されるのでしょうが、できればレコードの挿入等の度に索引の再構築をしたいのですがパフォーマンスに問題ありでしょうか。
ちなみに、テーブルは1つ、索引をつけているカラムは6つ、それぞれ500文字程度の日本語、1時間に10件程度のレコード挿入です。挿入のたびに
BEGIN
CTX_DDL.sync_index('索引名');
END;
を実行します。
また、再構築が同時に発生した場合はなにが起こるのでしょうか。
分かりにくい文章で申し訳ございません。テスト環境がないため本番環境で開発しているので自分で試してみることができず困っています。よろしくお願いします。
No.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 …
詳しいご回答ありがとうございます。
ON COMMIT、うまく動作しました。感激です。検索パフォーマンスについても了解しました。負荷が少なくなる深夜にでもバッチで最適化してみようと思います。あとはレコードの新規・更新のたびにインデックスの作成をすることによる負荷が気になるところです。
テスト環境の件ですが、ORACLEXEというものをインストールしてみました。テスト環境もできたことですし、いろいろ試してみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Visual Basic(VBA) M365環境での動作エラー、及び対応相談 1 2023/01/27 04:18
- サーバー Webサイト構築フリーランスの案件受注について 1 2022/03/27 18:16
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- Windows 10 outlook 2013でメール内の検索が不可。 1 2022/09/22 16:30
- 格安スマホ・SIMフリースマホ IIJmioへのMNP転入について(機種購入も含む)質問です。 ①新しい機種に新しいSIMカードを挿 3 2023/04/10 12:41
- Wi-Fi・無線LAN 30メートル以上離れた家屋に無線LAN環境構築方法 7 2022/09/18 18:08
- その他(動画サービス) 動画に字幕を挿入する方法を教えてください 1 2023/08/22 21:31
- うさぎ・ハムスター・小動物 5歳のうさぎさん(ネザーランドドワーフの男の子)と長距離の引っ越しをしますが、出来るだけストレスを減 4 2023/08/11 23:17
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一括で登録する場合のデータサ...
-
Viewにインデックスは張れ...
-
SQL*Loaderで、データを加工し...
-
売価変更がある商品の売上金額
-
異なるスキーマからデータを抽...
-
データを削除しても表領域の使...
-
グループ単位にCSVファイル...
-
Data Pump で大量データインポ...
-
ピポットテーブルの項目並び替...
-
特定のスキーマのテーブルを一...
-
truncate文で全テーブルを一気...
-
テーブル名を[]でくくらないと...
-
プロシージャの共有について
-
object browser で処理を中断す...
-
ACCESS2002のupdateの副問合せ...
-
ORA-00959: 表領域'****'は...
-
SQLServerのテーブル定義書(?...
-
Access レコードを追加できませ...
-
エクセルからアクセスにインポ...
-
SQLでスキーマ名(所有者名)の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Viewにインデックスは張れ...
-
INDEXの無効化
-
SQL*Loaderで、データを加工し...
-
アナライズとインデックス作成...
-
可変個数のデータはどう納める?
-
文字列中のスペースを排除する...
-
インデックス作成後アナライズ...
-
SQL*LoaderとInsertの違いについて
-
OracleTextの索引再構築について
-
テスト環境と本番環境で、DBか...
-
Oracle Databaseのインデックス...
-
SQLのIN句について
-
blevel=3のデータ作成
-
オラクル クラサバ環境で動作...
-
論理読み込みブロック数とは?
-
IN 句ではインデックスが使用さ...
-
該当データが存在しないときに...
-
データ表示順序
-
SQLLOADERについて
-
Wordで複数の索引を作りたい
おすすめ情報