データ削除、追加によるロールバックセグメントについて

このQ&Aのポイント
  • テスト環境で行われたテーブルの200万件の削除と100万件の追加により、VBアプリが遅くなりました。この遅さの原因として、ロールバックセグメント(UNDOセグメント)や一時的にデータが蓄積された可能性が考えられます。
  • 削除や追加が行われた場合、データはどのオブジェクトに蓄積されるのか疑問です。また、データの削除や追加が原因でアプリが遅くなるのかも不明です。
  • 対応として、DBサーバのOSの再起動を行いましたが、まだ遅さが改善されませんでした。しかし、DBの再起動を行ったら遅さが改善されました。原因についての基礎知識が不足しており、アドバイスをお願いします。
回答を見る
  • ベストアンサー

データ削除、追加によるロールバックセグメントについて

環境:Oracle9i サーバ:Win2003 言語:VB6 テスト環境であるテーブルの200万件の削除、100万件の追加を行った後にVBアプリがすごく遅くなりました。 1.ロールバックセグメント(UNDOセグメント?)にデータがたまって遅くなったのでしょうか?  またはテンポラリにデータがたまったのでしょうか? 2.削除や追加が行われた場合はどのオブジェクトにデータがたまったりするのでしょうか? 対応としてDBサーバのOSの再起動を行ったのですがまだ遅く、再起動後にDBの再起動を行ったらなぜか遅かったのが改善されました。 そもそも原因がデータの削除、追加で体感レベルで遅くなったりするのかも疑問です。 基礎知識が足りなくて申し訳ありませんが、アドバイスお願いいたします。

  • Oracle
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.3

#1 です 遅延ブロッククリーンアウトについて、わかりやすい説明と解消方法があります。 http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-489965&bbsid=1&no=28716&view=9 実際にはUNDOがいっぱいになるわけではなく、 データブロックのITLという部分とUNDOセグメントヘッダという管理領域で 実際のデータブロックへのコミット作業を先送りさせています。これでコミット時の応答が速くなります。 おら! オラ! Oracle - どっぷり検証生活 UNDOやREDOについてもあります。一通り目を通しておくとOracleの理解度が高まります。 http://www.insight-tec.com/mailmagazine/ora3/mail_back_index.html

参考URL:
http://www.insight-tec.com/mailmagazine/ora3/mail_back_index.html
toshi_200578
質問者

お礼

回答ありがとうございます。 非常にわかりやすい説明とリンクでした。 あとは自分の理解度の問題のようです。 ありがとうございました。

その他の回答 (2)

回答No.2

VBアプリがどこで動いているのかが分からないのですがDBサーバ上で動いているのであれば 「OSの再起動を行ったのですがまだ遅く、再起動後にDBの再起動を行ったらなぜか遅かったのが改善されました。 」ということは外的要因しか考えられません(他の誰かがたまたま重たい処理を流していた) 当然DBサーバのOSの再起動はDBの再起動が含まれますので...

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.1

再起動によって改善されたのではなく、 色々操作している間に遅延ブロッククリーンアウトが発生して UNDOセグメントヘッダのコミットフラグがデータセグメントに反映されたためでしょうね。

toshi_200578
質問者

補足

回答ありがとうございます。 すいません。せっかく回答頂いたのですが、よく理解できてません。UNDOセグメントがいっぱいになっているのを確認する方法などはありますでしょうか? また、上記データセグメントに反映されたというのは何か確認方法があるのでしょうか? 経験が浅いもので理解できずに申し訳ありません。 よろしくお願いいたします。

関連するQ&A

  • ロールバックセグメントの使用率

    どなたか教えてください。 私の環境はOracle8です。 ロールバックセグメントの使用領域(空き領域)を知りたいのですが、 どうしたらわかりますか。 SQLを教えてもらうと助かるのですが。 よろしくお願いします。

  • 一括更新の際のロールバックセグメント

     ただいまOracleの勉強中でふと気になったので、暇なときにでもお答えくださいませんか。  A と B と二つのテーブルがあって、一方の値で他方を一括更新かけるのに、以下のような SQL を発行したとします。 UPDATE TABLE_A A SET ( A.COL_1 ) = (SELECT B.COL_2 FROM TABLE_B B, A WHERE B.COL_KEY = A.COL_KEY)  この場合、A のデータがもし100万件あれば100万回、サブクエリーを実行して UPDATEをかけるといった処理が走ると思いますが、このとき、ロールバックセグメントも100万件分の大きさが必要になるのでしょうか?  そして、もしロールバックセグメントが不足した場合は、全体がロールバックされて何もなかったことになるのでしょうか?

  • CSVデータの取り込み

    開発環境 言語 VB6.0 DB  ACCESS 一つ目は、CSVデータをACCESSに保存したいのですがどうしたらいいですか? 開発環境 言語 VB6.0 DB  ORACLE9i 二つ目は、CSVデータをORACLE9iに保存したいのですがどうしたいいですか? どうかよろしくお願いします。

  • データが誰かに削除されて突き止められない

    環境:Oracle9i 9.2.0 ある化粧品のシステムですが、いきなりデータが削除されてしまいました。原因を突き止めようと思っているのですが、誰かわかりません。 まずわからない原因として、DBを扱える全ての人が同じユーザでログインしています。 その気になれば全員が容疑者です。 どのPCでどんなSQLを実行したかわかりますでしょうか?このままでは非常に険悪な空気になってしまいます。。 よろしくお願いします。

  • 初歩的な質問ですが(ASPからのOracleDBのデータ追加)

    初歩的な質問が2点あります。 よろしくご教示ください。 ASPからOracleのDBに複数(数十件という単位です)のデータ を追加しようとしています。 方法として、 1.Insert文で件数の数だけSQLを投げる 2.ADOのAddNewメソッドを使用して、件数の数だけ  レコードを追加し、最後に一回Updateメソッドを実行 の二通りがあると思うのです。 (他にも何か方法がありましたら教えて下さると非常にありが たいです) どちらの方法が処理速度は速くなりますか? ちなみに、20件でテストしても、あまり変わらないよう でした。何件くらいから差がでるものでしょうか? もう一点。 データ追加の処理速度は、既にDBに登録されている データの件数に影響されますか? データ更新の場合はどうでしょうか? 以上二点、どうぞよろしくお願いします。 環境↓ ・言語:ASP ・XML:MSXML3 ・ブラウザ:IE5.5 ・IIS:5.0 ・DB:Oracle 8i

  • 表領域に追加したファイルの削除

    教えてください。 DB作成時にデフォルトで作成されていた「TEMP」と「CWMLITE」の表領域に誤ってデータファイルを追加してしまいました。 (TEMP02.dbf、CWMLITE02.dbfという風に) 追加したファイルを削除するには該当のデータファイルを オフラインにして実際にOS上からファイルを削除するという 手順で問題無いのでしょうか? それともOracle側でさらに処理が必要でしょうか?

  • SQL Server へのデータ追加について

    現在a、b、cの店舗でそれぞれAccessをDBとして活用しているのですが、それとは別に 3店舗分のデータを一つにまとめた統合用DBとしてSQL Serverを利用したいと考えています。その際、それぞれ各店舗分のデータをSQL Serverへと追加していきたいのですが、どういった処理が最適で効率が良いのか分からず困っています。 希望する処理的には何らかのexeファイルを作成し、そのexeファイルを叩くとAccessからデータを吸い上げ、SQL Serverへとデータを追加するということを行いたいです。 私が考えられる処理としては以下の2点でした。 1、Accessから吸い上げたデータをストアドを使い、データを追加していく。 2、Accessから吸い上げたデータをCSVに変換し外部ファイルとし、ローダーを使用して   データを追加する。 それぞれの店舗データが3万件程あります。 なるべくDBに負担をかけないで以上の様な事を行いたいです。 DBまわりにお詳しい方、ご教授よろしくお願い致します。

  • テスト環境と本番環境で、DBからのデータ取得にかかる時間に違いがある。

    お世話になります。 WebサーバとDBサーバを使用して構築したシステムが あります。 テスト環境と本番環境があり、それぞれ、以下の様になってます。 テスト環境 Webサーバ   Windows2000 Server+IIS5.0+ .NET Framework DBサーバ   Windows2000 Server+Oracle8.0.6 本番環境は Webサーバ   Windows2000 Server+IIS5.0+ .NET Framework、 DBサーバ   Solaris(バージョン分からず)+Oracle8.0.6 となっています。 テスト環境と本番環境の違いについてですが、 Webサーバの方は、スペックは違いますが、 その他の環境は同じです。 DBサーバの方は、OSの違いとOracleのデータベースの定義に少し違いがあるかもしれませんが、 データの件数とテーブルの定義は同じです。 そこで肝心の質問の件なのですが、 テスト環境と本番環境で、同システムを実行した際に、 DBからのデータ取得にかなりの時間の差があるのです。 テスト環境で、2~3分で終わる処理が 本番環境だと、30分くらいかかってしまいます。 何が原因でこのような状態になっているか分からず、 すごく悩んでいます。 ネットワークの速度にはそれほど違いはないのですが・・・。 また、マシンスペックは本番環境の方が高いです。 どんな細かい情報でもかまいませんので、 ここが怪しいのではないか?とかありましたら、 ご教授お願いします。 また、他に必要な情報とかありましたら、 できる限り調べますので、どうぞよろしくお願いします。

  • プログラムの追加と削除に無いDAEMON TOOLSを削除するには?

    先日ウィルスバスター2010(以下VB2010)をインストールしたところ、途中でハングしました。 再起動させたところ、XP自体が起動しなくなりまして、 XPを再インストールしました。 その後、VB2010とXPとを何回かインストール繰り返したところ 私の環境下ではDAEMON TOOLSが影響している様で、 DAEMON TOOLS 4.30.4 -Liteを削除した所VB2010のインストールとOS起動が出来ました。 さらにDAEMON TOOLS使えないと不便なので手持ちで一番古い4.10をインストールしたところ こちらのバージョンではVB2010との共存が出来る事がわかりました。 そこで、質問ですが DAEMON TOOLS4.10がアプリケーションの追加と削除に出てきません。 今の所は削除予定ありませんが、削除しようとした場合は どのようにアンインストールすれば宜しいのでしょうか? 宜しくお願いいたします。

  • oracleの自動undo管理モードについて

    現在、oracle9iで手動undo管理(rollback segmentによる管理)を 行っていますが、 ・負荷の高いバッチ処理は特定の大きいロールバックセグメントを使用 ・小さいオンライン処理は小さいロールバックセグメントを使用 というような細かいプログラム管理は行っておらず手動undo管理を 行うメリットがないため自動undo管理への移行を検討しています。 まずテスト環境を自動undo管理モードにしてさまざまな処理を流して v$rollstatを確認してみたのですが、短い時間にも関わらず 拡張(extends)が5くらい発生していました。 今まで、v$rollstatのwaitsや拡張(extends)をできるだけ小さく することを意識して運用を行ってきたのですが、多少の拡張は それほどパフォーマンスに影響はないものでしょうか。 また、自動undo管理モードで運用して何か困ったような経験が あれば教えてもらえないでしょうか。 (自動拡張後の縮小方法については確認しました。)