• ベストアンサー

ORACLEでINSERT処理が遅い

WINDOWS2000SERVER+ORACLE8.1.7で在庫管理ソフトを使用しています 。システム会社が作ったソフトなのですが、登録処理 (INSERT文のみで作られていると言っていました)が非常に遅くなって います。 10レコードのデータを登録するのに2分かかりました。 INSERT処理が遅くなる要因などご存知の方 いましたら、ご教示下さい。 (SELECT文は登録処理では使用していないとの事) ●システム会社の指示で「データをEXPORT/INPORTするバッチファイルを送りますので実行して下さい」との事で(EXPORT/INPORT実行すると早くなると言われました) 対象のテーブルをEXPORT/INPORTし、サーバ再起動しましたが、まだまだ遅いです。(10秒程早くなりました) システム会社の対応が非常に不安なのでここで質問させて頂きました。

  • mmate
  • お礼率100% (11/11)

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

  • ベストアンサー
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

インデックス領域がフラグメンテーションしているのかもしれません。 データをexportしてから「全件削除」し、それからimportしてみてください。 http://www.atmarkit.co.jp/fdb/rensai/orasql07/orasql07_3.html もしくは、索引の再作成か。 http://oracle.se-free.com/ddl/A1_index_rebuild.html 表領域は足りているのでしょうか? 本当は、各種統計情報をちゃんと解析して、何が遅くなっている原因なのかを追究するんですけどね。 サーバのHDDアクセスは遅くなっていないでしょうか?

mmate
質問者

お礼

早速、対象の表の索引を再作成すると物凄く早くなりました。 (2分→10秒) 本当に助かりました。有難うございます。

その他の回答 (1)

回答No.2

 INSERTを1個 処理する毎にコミットが発生しているので遅くなっていると思います。 デフォルトでコミットがOnになっているのでOffにすれば早くなると思います。

mmate
質問者

お礼

回答有難うございます。 システム会社にプログラム内容確認してみます。

関連するQ&A

  • インサート処理のスピード

    n件のデータを (1)SELECT INSERTで処理するのと、 (2)SELECT文をカーソルループにして1件ずつINSERTするのでは 処理時間は結構違うのでしょうか? 手元に実行環境がないためご存知の方がいらっしゃったらご教授下さい。 (SQLSERVERかORACLEかなどは問いませんので)

  • ORACLEの互換問題について

    はじめまして。 DBにORACLEを使って業務システムを開発している者です。 現在の環境は サーバ OS:Windows2003 Server DB:Oracle9i Release 2 クライアント  OS:WindowsXP DB:Oracle8.0.5 となっているんですが、Oracle9iに対してOracle8.0.5から データのエクスポートは可能なのでしょうか? 現段階ではサーバから直接エクスポートする方向で考えているんですが・・・ 宜しければ助言の方をお願い致します。

  • 「SELECTして取得できない場合、INSERT」の不完全さの改善

    はじめまして。 ユニークキー設定しているカラムに、 SELECTして取得できない場合、INSERTの処理をすると 違うセッションでタイミングによってINSERTがエラーになってしまうと思います。(以下参照) -------------------------------------- 時間  SESSION1     SESSION2 ↓    SELECT→× ↓                SELECT→× ↓    INSERT→○ ↓                INSERT→× -------------------------------------- この様な場合、SESSION2を生かすには、その後SELECTを再度実行すればよいと思うのですが、他によい方法はないのでしょうか? 何かございましたら、ご教授お願いいたします。 各バージョン MySQL5.0 (PHP5.1)

  • ORACLEについて

    ORACLEでDBを構築しようと思っているのですが、 ORACLE8とORACLE8iとはどう違うのですか? 今手元にその二つのソフトがあるのですがどちらを使えばよいかわかりません。ちなみにwebサーバーでシステムを行おうと計画をしています。 よろしくおねがいします。

  • AccessDBへのInsertとSelectタイミングについて

    AccessDBへのInsertとSelectタイミングについて 現在.NET Framework 3.5にて業務アプリを開発しています。 主にデータベース編集を目的としたアプリです。(DBはAccess2000) Insert/Deleteについては、データソース接続し、TableAdapterのクエリを利用しています。 Selectについては、Microsoft.Jet.OLEDB.4.0経由で取得しています。 このような条件で、Insert/Delete処理を行った直後にSelect処理でデータを取得 すると、Insert/Deleteが反映されていないデータが取得されてしまいます。 これを回避する方法を教えてください。 (非常に低レベルな質問かと思いますが、何卒よろしくお願い致します。)

  • OracleのLONG型への insert について

    お世話になります。 ASP + Oracle8.0.5で開発中のシステムがあるのですが、 ASP上のテキストエリアに文章を記述して、OracleのテーブルのLONG型のカラムに対して insertを行うとエラーが起こってしまいます。 正しくは、全角で2000文字までは入力できるのですが、 それを越えてしまうと、ORA-01461エラー(LONG値はLONG列にのみバインドできます)という エラーが起こってしまい、カラムに対してinsertすることができません。 テーブルを見直してみたのですが、ちゃんとLONG型に設定してありました。 LONG型のカラムにデータを登録する際、4000バイト以上の文字列は挿入できないでしょうか? でもLONG型って、2GBまで使用できるはずでしたよね? ご教授のほど、よろしくおねがいします。

  • PHP + Oracleで『処理中です』を表示したい…

    PHP + Oracleで『処理中です』を表示したい… PHP5 + Oracle10gでの開発中です。 フォーム1(1.php)でUser・PWを入力し、 ボタンをクリックすると SQL(SELECT文)を実行して結果をフォーム2(2.php)に 表示する』といったものを開発したいと考えています。 結果画面でのSQL結果表示は問題なくできたのですが、 結果表示までに時間がかかってしまいます。 2.phpはこんな感じです。 <?php // POSTされたUser・PWのチェック // <head>をecho // Oracleに接続 // SQL実行 <-- これが時間がかかる // <body>をecho <-- <table>にSELECT結果をセット ?> そこで、SELECT結果を表示するまでの間『処理中です』みたいなものを 表示したいのですがどうしたらいいのでしょうか。 可能であれば、'処理中です'という文字と プログレスバーのようなGIFを表示したいと思います。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • Webで重い処理をするとリクエストが10回飛ぶ

    PHPでフレームワークのCAKEを使ってWebシステムを作っているのですが、どうしてもわからない点があるので、ご教授頂きたく質問させていただきました。 現在Webサーバ2台とDBサーバ1台であるサービスを運営しています。 Webサーバはロードバランサで負荷分散をしています。 画面上でどうしても重たい処理をする必要があり、実行しているのですが、リクエストが10回飛びデータが10個登録されるという不思議な現象が起こっており対応に困っています。 開発用にWebとDBが一緒の開発用サーバもあります。やったことは 1.開発用のサーバで同じデータ、同じ処理を実行 リクエストは1回でデータも1個登録 apacheのアクセルログにも1回アクセスされている 2.運営用のサーバで同じ処理だが、データ量を減らして実行 リクエストは1回でデータも1個登録 apacheのアクセルログにも1回アクセスされている 3.運営用のサーバで同じデータ、同じ処理をIPアドレスを指定して実行 リクエストは1回でデータも1個登録 apacheのアクセルログにも1回アクセスされている 4.運営用のサーバで同じデータ、同じ処理を実行 リクエストは10回でデータも10個登録 apacheのアクセルログにも10回アクセスされている 以上の結果からロードバランサで何かしらのことがされているのかと思い、サーバ会社に問い合わせてみたのですが、「そんなことはない」との回答でした。 他に何をどう調べたらいいのかもわからず、かなり手詰まりなかんじです。 手がかり、確認内容などなんでもいいので、ご教授頂けないでしょうか。 よろしくお願いします。

  • あるタイミングでoracleの処理が遅くなることについて。

    質問です。 oracleにアクセスするWebシステムで、ある程度負荷をかけると処理が極端に遅くなります。 OS : Miracle Linux2.0 WebServer : Tomcat4.1.24 Oracle : 9.0.1 実際に行っている処理は、DBからデータを取得するだけです。データの量としても多くはなく、100件程度です。 コネクションプールを用いており、データソースからコネクションを取得し、ResultSetから結果を取得しています。 ResultSetからのデータ取得は、下記のようにwhile文でループさせています。ちなみに、next()を実行させているだけで、その他のことは何もしていません。 while( resultset.next()){ } 上記のような処理に対し、ボタンを20回ほど連打すると、処理が極端に遅くなってしまいます。処理の計測は、while文の前と後にcurrentTimeMillis()を設け計測しました。 1アクセスのみの時間は0.2sほどですが、連打をすると20sと遅さになります。 また、while文の最後にSystem.out.print()にて処理の終わりを確認しようと思ったのですが、処理が遅くなった途端、終わりまで到達せずに止まったような感じになり、20sほど経過してから、アクセスした分の処理が一気に終わるのです。 テーブルのロックか、もしくは、パフォーマンスの問題でしょうか?曖昧な説明で申し訳ありませんが、些細なことでもよろしいので、どなたかご教授願いますでしょうか。 よろしくお願いいたします。

  • Oracleのエクスポート、インポートについて困っています・・・

    Oracleのエクスポート、インポートについて詳しい方にお伺いしたいのですが。 質問の内容と、スペックですが、 エクスポートの対象にしているOSがlinuxで、DBがOracleです。このサーバーは私のローカル内にありません。 インポートしたいデモ環境(OSがlinuxで、DBがOracle)が、私のローカル内にあります。二つとも別場所です。 お分かりのとおり、この対象OSのOracle内のデータとデモ環境(OSがlinuxで、DBがOracle)のOracle内のデータを 同じようにしようとしております。 私のOSはwindowsXPで、Oracleはインストールしておりません。 これが痛くてフリーソフトをあれこれ使おうとすると、SQL*Net(有料?あまりよくわからない)が必要なことを知ってより困っています。 この私の環境(OSはwindowsXPで、Oracleはインストールしていない)で 別場所のOracleからエクスポートし、自分のローカル内にあるデモ環境(OSがlinuxで、DBがOracle)のOracleに インポートできるフリーソフトってあるのでしょうか。 別場所であろうが、自分のローカル内だけであろうが、 エクスポートだけしかできないフリーソフトでもほしいです。 ないとは思いますが(結構、調べたので)、もし、ご存知のかたがいれば教えていただけないですか。 あと、実際、上記のような質問をしていますが、やはり、この件に関しては、 コマンドプロンプトを開いてimp/expをするのがよいのでしょうか。 できるだけ、シンプルな方法をつかみたい次第です。 もし、コマンドからの操作しかないのでしたら、 imp/expにおいて気をつけなければいけないこと等はあるのでしょうか。 expはDBに危険がないような気がするのですが、impはなにかと気をつけないといけなさそうな気がしますが・・・。 初心者すぎる質問で見苦しく恐縮です。 OracleのSQL文もよく知らないもので。 できれば詳しい方、よろしくお願いします。

専門家に質問してみよう