• 締切済み

Oracle のAnalyzeコマンドの発行タイミング

Oracle8.0.5を使っています。 Analyzeを定期的に実行しているのですが、データ量が多くなってしまい、時間が掛かっています。 現在はCOMPUTEで週1回くらい実行しています。 Analyzeを月1回に変更するとパフォーマンスが低下したりしますか? Oralceマスターの皆様、よろしくお願いします。

みんなの回答

  • cse_ri
  • ベストアンサー率29% (74/253)
回答No.1

どういう理由でAnalyzeコマンドを発行していますか。 "Analyze ... compute statistics;" を実行すると正確な情報が取得できますが、非常に時間がかかります。 もし正確さをそれ程必要としないのならば、 "Analyze ... estimate statistics;" を実行してみてください。すぐに終わりますよ。

daisukeGTR
質問者

補足

ご返答有難うございます。 この統計情報は何の目的で取られるのでしょうか? Oracleのパフォーマンス向上と聞いたことがあるのですが。 compute → estimate に変更することでパフォーマンスに影響でることなどはないのでしょうか? もし、estimateにする場合、走査割合はどのくらいを設定すべきでしょうか? Oracleについてほとんど知識がありませんので、 質問ばかりで恐縮ですが、よろしくお願い致します。

関連するQ&A

  • あるタイミングで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:統計情報とテーブル削除

    oracle10gを使用しております。 統計情報について質問させていただきます。 テーブルAについて、[statistics = none]を指定しExportします。 統計情報取得コマンドを実行します。 analyze table TABLE_A compute statistics; 後に、テーブルAを削除します。 drop table TABLE_A; バックアップファイルを基に、テーブルAをImportします。 このとき、テーブルAの統計情報はExport実行時と同じになるのでしょうか?

  • Oracle 10.2.0 でMAX集計がおかしい!?

    VB6 で oo4o を使って Oracle DB開発をしています。 Oralce 8.1.6 から Oracle10.2.0 にサーバを切り替えました。 bというテーブルがあって、 a c d ---- ------ ----- 10 2 1 20 3 1 30 4 1 40 5 1 50 6 2 というデータがあったとします。 Select MAX(a) as a from b WHERE d=1 のようなSQLをVBから発行したときに SQL*PLUSでは、 a ---- 40 という結果が返ってくるのですが、VBでは、 a --- 10 20 30 40 のように複数行のレコードセットが帰ってきます。そのため、最大行を取得できません。Oracle8 のときは、SQL*PLUSと同じ結果が返ってきていました。ちなみに Select MAX(a) as a from b WHERE d=1 GROUP BY d ~~~~~~~~~~ と、GROUP BYを付けると、ただしい(SQL_PLUSと同じ値)値が取得できます。 Oracle10.2.0の問題か、oo4oの問題かと考えています。 ちなみにoo4oのオブジェクトは、 CreateObject("OracleInProcServer.XOraSession") で作成していて、クライアントのバージョンは 9.2.0.4.4です。 長文で失礼しますが、どなたかSQLを変更せずに解決する方法をご存じないでしょうか?

  • オラクルのデータベースについて

    現在oracle 10g_home1を使用しており、その中にデータベースを作成し、 excelで入力したデータを、excel vbaを使ってそのデータベースに追加変更したいのですが、 実行方法がわかりません。 大変抽象的な質問で申し訳ありませんが、教えていただきたいのです。。。 (解説サイト、書籍などの紹介でも構いません) 右も左も全くわからず、手の付けようもない状態です。 これから勉強していく最中ですが、時間が迫ってます。 よろしくお願いします。本当に申し訳ありません。

  • Oracleはどの程度まで巨大なテーブルを扱える?

    稼働中のOracle9iデータベースに新規テーブルを追加することになりました。 なのですが、現在利用中のテーブルに比べて、新規に扱おうとしているデータ量が格段に多く、 どれほどメモリを増やせばいいのか、普通にパフォーマンス評価できるのか、 それ以前に使い物になるのかといったことが全くわかりません。 サーバOSは64bitのSolaris8、メモリは4GBほど積んでいます。データのほうですが、 格納すべきデータが1日最大2000万件ほど発生します。データ保持日数は4ヶ月で、古いものから消していきます。 つまり、単純計算で一テーブル最大で約25億レコードが蓄積されることになります。 1レコードあたり概算で256バイトとして、600GBを超えます。 (ストレージは1TBくらい用意して、日付でパーティション分けして・・・とか考えてます) いきなり全部解決しようとは思いませんので、 巨大なDB構築に際して注意点、参考になる文書などご存知ありませんでしょうか?

  • Oracleのバックアップに関して

    すいません。Oracle初心者です・・・。質問があります。 OracleデータをARCserveにてDATテープにバックアップする事を考えているのですが、24時間サービスを止めれない運用で動いておりますので、 (1)アーカイブログモードに変更し、ホットバックアップする。 (2)サービスを止めずにEXP.EXEにてDMPをはき出しそのDMPファイルをバックアップする というような2種類の方法を考えているのですが、どちらにした方が良いか迷っています。上記2種類を考えると万が一障害がおきた時復旧時間&手間を考えると(1)の方が早いと思うのですが、アーカイブログを一定感覚でデータをはきだしするのでパフォーマンスが落ちると耳にしました。 そこで、質問なのですが、 Q1.もし(2)で行った場合、EXP.EXEでDMPをエクスポートしている最中にDBに書き込みがあった場合うまくエクスポートできるのでしょうか? Q2.(1)で行った場合、アーカイブログだけを毎日テープで取ればいいのでしょうか? 以上もしお分かりになる方がおられましたら宜しくお願いいたします。

  • DBサーバーのOracleからのデータ取得について

    WEBサーバー(Linux)とDBサーバー(WindowsServer2003)が分かれている環境で、WEBサーバーのPHPからoci8で、DBサーバーのOracleからデータ取得をしており、データ取得量?が多いとエラーとなってしまします。 SQL自体はOracle環境で実行して正常にデータ取得することは確認しているのですが、10万行程度のレコード数でもレスポンスの時点?でエラーとなります。 (レスポンスの情報が無いので、エラー内容が分からず、データ件数を絞ると抽出が出来ます) 解決方法をご存じの方や、PHPもしくはLinuxの設定で取得データサイズの設定方法について分かる方がおりましたら、ご教授ください。 宜しくお願い致します。

  • Oracleマスターのどれを取れば良いのでしょうか

    要領を得ない質問になりますが、よろしくお願いいたします。 尚、『出直して来い』に類する罵倒は甘んじて受けますが、その際にも何等かのご指導を頂ければ幸いです。 [質問] 題名にも書きましたが、下に書きました「質問の経緯」から考えて、私はOracleマスターのどれを目指せばよいのでしょうか? 行いたい事を簡単に書けば、『営業部門などからの要求に応じる為に、複数のDBにアクセスしてリレーショナルDB構築及び帳票出力』です。 [私のDBに対する現在の能力] 「SQL」や「Oracle」は触った事が無いので知識レベルはゼロとしてください。 「Access」は「バージョン2003」を使っておりますが、知識レベルは市販されている自習本(富士通オフィース機器)での応用は何とか理解している程度。VBAは一切勉強しておりません。 [質問に至る経緯] 現在、グループ会社内で共通使用している基幹システムはMcFrameというパッケージソフトです。 それまではコボル[大半が親会社の担当部署が自社作成したプログラム]で稼動していましたので、コボルを少しかじった程度の私でも初歩的なカスタマイズやホストコンピューターからのデータ取得が行なえましたし、私には対処できない物は親会社の担当部署の人間がプログラムを作ってくれたり、抽出データを自動送信してもらっておりました。 しかしMcFrameに切り替わってからは、任意のデータ抽出やプログラムのカスタマイズが自由に行えません[私だけではなく、親会社の担当部署も]。 その理由を親会社の担当部署に問合せた所『色々とあるが、これはOracleで作られているので、最低限でも公式資格を取得しないとアクセス権の付与候補者にすることも出来ない。何か変更する度に百万円前後の費用が発生するから我慢して』との返事が返ってきました。 そこで『Oracleマスターを取得すれば、DBへのアクセスは認めてくれますね』と再質問を行い、承諾を取りました。 しかし『ところで、Oracleマスターには色々有るけれど、どれを取ればいいのですか』と聞いても言葉を濁すだけで『ゴールドですかね』としか返事が返ってきませんでした。 Oracleのバージョンも判りません。

  • oracle(SQL)のHINT指定について

    性能問題について対応しています。 約2000万件のマスタと付随する各テーブルを結合して、検索条件に一致するデータを抽出するSQLを開発していますが、これらのパターン(曖昧検索:前方一致)において、前述の2000万件のマスタが駆動表となり、且つフルスキャンが走るものがあり、改善策を検討しています。 つきましては、HINT指定で駆動表を強制的に各テーブルに変更する方法(SQLのHINT指定内容)についてお教え願います。  →曖昧検索条件にもっとも絞られる対象のテーブルを駆動表とし、マスタテーブルはその駆動表とプライマリーキーで結合した形でアクセス(フルスキャンを避ける)ような実行計画となるSQLに改善をしようとしています。 以上です。 

  • Perl+DBD::Oracleのエラーがわからず困っています

    jboss と申します。お世話になります。 Solaris 上で動作させていた cgi プログラムを Linux へ移行しています。 下記の動作環境にて、ブラウザより該当プログラムを実行すると、 下記のようなエラーが発生します。 ■ 動作環境 OS RedHatLinux EL4.0 Apache 1.3.37 Perl 5.8.5 DBI 1.52 DBD::Oracle 1.18 DB Oracle 8i (8.1.7) ■ Apache のエラーログ install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Oracle/Oracle .so' for module DBD::Oracle: libclntsh.so.8.0: cannot open shared object file: No such file or directory at /usr/lib/per l5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230, <DATA> line 855. at (eval 7) line 3 Compilation failed in require at (eval 7) line 3, <DATA> line 855. Perhaps a required shared library or dll isn't installed where expected at /export/home/orasql.pl line 30 エラーログから解決方法を検索して、下記の方法は試したのですが解決しません。 ・LD_LIBRARY_PATH の追加 ・libclntsh.so.8.0 のパーミッション変更 ご存知であればご教授の程、お願い致します。