• 締切済み

アナライズでほとんどの処理が遅くなった!

ORACLE9の開発環境でデータをインポートしてANALYZEを行ったところ、半数以上の処理で著しくパフォーマンスが悪化しました。ANALYZEについて色々と調べている中では「たまに遅くなる場合がある」と言うニュアンスで受け取っていたのですが、多くの処理がとんでもなく遅くなると言う事態は想定していませんでした。 個々のSQLを調査するにしても数が膨大で時間がどれだけかかるか見当つきません。 一般論としてお聞きしたいのですが、ANALYZEをすることで多くの処理が遅くなってしまうような場合、何か根本的なところで誤りがあるのでしょうか?それともそういう場合もあるものなのでしょうか? また、ANALYZEをすることで遅くなる可能性のあるケースを具体的に紹介しているサイトはないでしょうか? よろしくお願いいたします。

みんなの回答

noname#17587
noname#17587
回答No.2

確かに遅くなるときもありますが半数以上となると何かあるかもしれませんね。 staspackはお使いですか?このツールで遅いSQLを見つけることができます。 ちなみにPSRの適用で実行計画が変更され遅くなることもありますが心当たりはありませんか? PSR3からPSR4の変更のときにはまりました。

sekichan2006
質問者

お礼

いくつか遅くなってしまったSQLを特定できているのですが、どうも氷山の一角のようでまだまだありそうです。staspackは使っています。やっぱり個々のSQLの調査が必要ですよね? 別の部門が管理しているので、PSRの適用状況は現時点では把握していません。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

ANALYZEで統計情報を取得するための探査量を指定しますが、 どのような指定で行いましたか? 理想的には、データ部索引部共に全域調査させるのが、良いのですが、 大きなデータベースの場合は、事実上困難です。 そのため、ある程度、割り切って、調査の量を制限しますが、 これが、実行計画の立案に狂いを生じさせる原因になります。 どの程度の範囲をANALYZEさせるか見直せば、改善する のではないかと思います。 個人的には、データ部20~30% 索引部100%程度で行いのが 良いように思います。

sekichan2006
質問者

お礼

ありがとうございます。データ・索引とも100%で実行しました。100%でも万全ではないことは認識しているのですが、こんなものなのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DWHの処理能力について

    どのように質問すれば、良いのか自体あまりわかっていないのですが、 今後システムの仕事をすることになり、現在、DWHの導入を検討しております。 DWHの導入を考えているのですが、インポートしたいテーブル数が500超えてしまい、「500は多すぎる、これでは処理時間に1日かかってしまう。」と言われてしまいました。 元のシステムでオラクルのDBを使用しており、そのデータをDWH用のオラクルDBに写し、DWHにデータを入れるようにしようと考えております。 出来れば、3時間から4時間くらいで、インポートしたい(エンドユーザーがデータを確認できるように)のですが、一般的に、DWHへのインポートできるテーブル数はどのくらいなのでしょうか?また、500くらいのテーブルを希望の時間でインポートしたい場合にやりようはないのでしょうか。 分かる方いらっしゃいいましたら、ご教授ください。

    • ベストアンサー
    • MySQL
  • MERGEコマンドについて

    ORACLE9iよりSQL文にMERGEというものが追加されましたが、従来のように一意検索後、データがあれば更新、なければ挿入というプログラムを作った場合よりパフォーマンス的にも向上するでしょうか? カーソルで10万件以上のデータを処理するので単発で0.01秒でも早くなれば感謝感激です。 業務などで実現された方、もしくはオラクルに詳しい方、どうぞよろしくお願いします。

  • Oracleチューニング

    Oracle9i(9.0.2)を利用しています。 現在パフォーマンス低下のため、抽出効率の悪いSQLを探していますが、どのSQLが効率が悪いのか分かりません。 本番環境なのでSTATSPACKを利用することもままならず、どうにかV$ビューを利用して解決したいです。 どなたかご存知でしたらどの項目がどの項目より大きければチューニング対象のSQL などと言う指標をご教授願えませんでしょうか? 私としてはV$SQLがどうも使えそうかと考えておりますが、カンであって実際にどの項目を利用すれば良いのか見当がついていないレベルです。 よろしくお願いいたします。

  • SQL分のコツ

    INTERBASEを利用しているのですが、あるバッチ処理用のSQLが膨大にCPUを消費してしまい、ほかのプロセスに影響を与えています。 1文で3つのテーブルを参照しつつ、MAXを4項目、副問い合わせも2か所しているので、負荷がかかるのはわかっているのですが。。。 SQLの構文の書き方でパフォーマンスを向上させるテクニックがあればお教え下さい。

  • 環境変数NLS_LANGの設定方法

    - UMIXのORACLEからDBをエクスポートしたものを、NTのORACLEのDBに インポートしたいのですが、エラーが発生してしまい上手くインポート出来ません。 調べた結果、環境変数NLS_LANGを設定すれば、エラー無くインポート出来るようなの ですが、今度は、環境変数の設定が上手く行きません。 DOS上で下記を入力し実行しました。。。。  >set NLS_LANG JA16SJIS 「JA16SJIS」は、sql*より、V$NLS_PARAMETERSを参照した値を設定。 でも、環境変数は存在しませんのエラーメッセージで、上手くいきません。 きっと、根本的に間違っているようにも思うのですが、どうしたらよいのか わからずに困っています。 アドバイス等がありましたら、是非、宜しくお願い致します。 -

  • oracleデータのインポート&エクスポートについて

    oracleデータをインポートするにはSQL*LOADERを使用するのが一般的な方法の一つですが、 同じように、その逆であるエクスポートを行う場合はどのような手段を用いますか? 条件としては ・バッチ(シェル)で実行できる事。 ・SQL*LOADERでインポートする為のデータと互換性のあるフォーマット(CSV)である事。 ・ツールの追加購入は考えていません。

  • 表領域の使用率

    表領域の使用率が高くなった場合、データ処理速度(Oracleのパフォーマンス)に影響がありますか。

  • あるタイミングで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ほど経過してから、アクセスした分の処理が一気に終わるのです。 テーブルのロックか、もしくは、パフォーマンスの問題でしょうか?曖昧な説明で申し訳ありませんが、些細なことでもよろしいので、どなたかご教授願いますでしょうか。 よろしくお願いいたします。

  • PL/SQLからshellスクリプトの起動はできますか?

    ORACLE9i(Solaris)で処理しているPL/SQLから同サーバ上のshellスクリプトを起動させることは可能でしょうか?可能な場合は、そのやり方を教えてください。

  • SQLの性能に関して

    SQLの初心者です。 質問がわかりずらかったら申し訳ありません。Oracleを使用してます。 多くのSQL文(約1000個)と、そのSQLでアクセスしたテーブルが保持しているレコード件数、さらに処理時間がかかれた資料があります。 取得できたレコード件数の資料はありません。 これらの資料を元に、SQLの性能は何に相関があるか(例えばjoinの数など)回帰分析を用いて調べようとしてます。 join数以外に、処理時間と何を比較すれば、相関が出そうですかね? また、変数を増やして重回帰分析も考えてます。 比較対象のアドバイスをお願いします。