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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Viewにインデックスは張れ...
-
SQL*Loaderで、データを加工し...
-
Wordで複数の索引を作りたい
-
インデックス作成後アナライズ...
-
INDEXの無効化
-
インデックスの作成
-
主キー以外の項目にNotNull制約...
-
コストベース・オプティマイザ...
-
データを削除しても表領域の使...
-
CLOB型へのINSERT
-
postgreSQLのint型は桁数指定が...
-
異なるスキーマからデータを抽...
-
datapumpの実行方法について
-
テーブルからのselectにおいて...
-
ACCESS 複数テーブル・複数フィ...
-
自動で生成されるユニークID
-
RDBのテーブル種類の違い
-
DELETE文でFROM句を省略した場合
-
viewのバックアップ
-
複数テーブルのUPDATE
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Viewにインデックスは張れ...
-
INDEXの無効化
-
SQL*Loaderで、データを加工し...
-
アナライズとインデックス作成...
-
可変個数のデータはどう納める?
-
OracleTextの索引再構築について
-
SQL*LoaderとInsertの違いについて
-
論理読み込みブロック数とは?
-
インデックス作成後アナライズ...
-
文字列中のスペースを排除する...
-
Oracle Databaseのインデックス...
-
統計情報について
-
インデックスの作成
-
【ANALYZE】 テーブル・インデ...
-
Accessのデータを分割するプロ...
-
SPLIT PARTITON後のインデックス
-
テスト環境と本番環境で、DBか...
-
目的のインデックスが使用され...
-
oracle10g統計情報取得の確認方法
-
主キー以外の項目にNotNull制約...
おすすめ情報