• 締切済み

待機イベント

db file scattered readが発生したときsql ordered by gets(statspack)にあがったsqlをチューグする必要があると見たのですがいまいちつながりがわかりません。バッファを多く使うsqlはマルチブロック読み込みを起こす原因のひとつだという考えでよろしいでしょうか?

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

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ muyoshid です。 db file scattered read は主に全件検索の時に使用されます。 索引を使用しないため、Oracle はHWM までのブロックを読込むため 大量のInsert&Delete が行われて無効ブロックが大量にあるような 場合、結果的に大量のI/O が発生してパフォーマンス劣化の原因 になるので、先ずは大量読込みを行っているSQL をチューニング する事だと思います。

関連するQ&A

  • db file scattered readの回避

    エクスポートファイルのインポート時に、CREATE INDEX で "db file scattered read" が発生して大幅な時間が掛かっています。 この事象を回避してcreate indexをより高速に完了させる方法などありますでしょうか?

  • どのセッションが重いのかを知りたいです。

    環境:Oracle9i 9.2.0 複数のユーザがSQLを発行しており、DBサーバが重くなっているのですが、どのSQLがどれだけ重いのかがよくわかりません。 セッション情報を参照し、数値が大きいのだけを取り出しました。 ユーザA session connect time 1128422389 process last non-idle time 1128422389 session pga memory 7126460 consistent gets 16110210 db block gets 2024236 redo size 310089028 ユーザB session connect time 1128424040 process last non-idle time 1128424040 session pga memory 409020 consistent gets 736700 db block gets 176834 redo size 0 上記の情報などでわかるのでしょうか? 完全に知りたいのではなく、ざっくりとどのSQLに負荷がかかっているかを知りたいです。 宜しくお願い致します。

  • Oracle 実行計画の読み方

    コメントあれば、よろしくお願い致します。 0 recursive calls 0 db block gets 7,800,000 consistent gets --select文でアクセスしたバッファキャッシュのブロック数。ディスクとメモリへの総アクセス数 A 3,500,000 physical reads --ディスク上のデータファイルにアクセスしたデータ要求の総ブロック数 B 0 redo size 219,000,000 bytes sent via SQL*Net to client 7,100,000 bytes received via SQL*Net from client 500,000 SQL*Net roundtrips to/from client 100 sorts (memory) --メモリ内でソートした回数 C 0 sorts (disk) 9,200,000 rows processed --処理対象となった行数 D 一番、重視しなければいけないのは、A だと思っています。 780万回もアクセスされていますが、 ブロック数が 8K に設定されている環境であったとして、 1024*8*780万 = 63,897,600,000約 63GB の i/o が一つのSQLで発生 B に関しても一応計算してみると、 1024*8*350万 = 28,672,000,000約 28GB の i/o が一つのSQLで発生 D に関しては、920万行という結果は分かるが、1行辺りの幅が分からないので、 幅を別途SQLから計算し、どういった負荷を与えている文なのかを分析する必要がある。 select statement optimizer=choose からの数十行には、 (FULL)が、(UNIQUE INDEX)に比較して、10倍ぐらい表示されていると仮定します。 それぞれの検索テーブルの件数ははっきりしていたとして(1件~2000万件ぐらい(400万件以上が5テーブル))、 何をどうするのがSQLチューニングでしょうか。

  • 統計情報について

    以下の統計情報ですが、各項目が具体的にわかる資料は何を見たらわかりますか? ちなみに「consistent gets」が多いと重いのかなぁと考えてる程度の知識です。 宜しくお願いします。 ---------------統計情報------------------------ 統計 ---------------------------------------------------------- 187 recursive calls 0 db block gets 176479 consistent gets 63028 physical reads 0 redo size 391 bytes sent via SQL*Net to client 503 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed ---------------統計情報------------------------

  • バッファの上限なしでreadpartialするにはどうしたらいいですか?

    Rubyでノンブロッキングモードでファイルやパイプから読み込みをしたいんですが、Readpartialだと受け取るデータの長さを指定しないといけないし、 sync=trueにしてreadしてもブロックされてしまうので困っています。 知っている方教えてください

  • JSPでPostgreDBにアクセスしHTML表示するプログラム

    DB内容取得表示のコンパイルエラー。型に解決の原因わかりますでしょうか? Tomcat5.5、JRE :1.5.0_09、DB:PostgreSQL8.1 ~ソース~ (db_read.jsp) <%@ page contentType="text/html;charset=Windows-31J" import="java.sql.*,javax.naming.*,java.sql.*" %> <html> <head> <title>DB読込</title> </head> <body> <table border="1"> <tr> <th>商品ID</th><th>商品名</th> </tr> <% Context ctx=new InitialContext(); DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/wdpress"); Connection db=ds.getConnection(); PreparedStatement objPs=db.preparedStatement("SELECT * FROM 商品マスタ ORDER BY published ASC"); ResultSet objRs=objPs.executeQuery(); while(objRs.next()){ %> <tr> <td><%=objRs.getString("商品ID")%><td> <% } objRs.close(); objPs.close(); db.close(); %> </table> </body> </html> ~エラーログ~ org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: /db_read.jsp の中の14行目でエラーが発生しました 生成されたサーブレットのエラーです: DataSource cannot be resolved to a type

  • AccessVBA:読込専用ファイルを開きたい

    いつもお世話になっております。 Access2000を使用しております。 自MDBから別のMDBファイルのアクセスを行う際に OpenDatabaseメソッドを使用しているのですが、 対象のMDBファイルが読込専用である場合に 以下のエラーが発生してしまいます。 エラーコード   :3051 エラーメッセージ ::ファイル 'C:\***.MDB' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。 MDBファイルは書き込みを行いたいということではなく、テーブル名を参照したいだけなので、 読込専用のファイルでもアクセスしたいのですが、 Set db = OpenDatabase(fl, , True) といったように第3引数read-onlyの引数をTrueにしても同様のエラーが発生してしまいます。 読込専用のファイルは開くことが出来ないのでしょうか? ご教示の程、何卒よろしくお願いいたします。

  • INDEX作成による更新系の影響範囲

    環境:Oracle9i 9.2.0.1 言語:VB6 システム:受注管理システム ある業務アプリの性能改善の為、顧客マスタにインデックスを作成したいのですが、更新系の処理が遅くなることを嫌ってなかなか承認が下りないです。 そんなに負荷はかからないと思うのですが、実際インデックスを1つ作成するとどの程度影響があるのか客観的に証明できないから困っています。 上記の業務アプリは毎日使用しています。 データ件数は100万件程度です。 参考までにインデックス作成前のINSERT文実行した実行計画とインデックス作成後のINSERT文実行した実行計画を記述します。 作成前 統計 ---------------------------------------------------------- 86 recursive calls 26 db block gets 14 consistent gets 29 physical reads 2956 redo size 628 bytes sent via SQL*Net to client 825 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 4 sorts (memory) 0 sorts (disk) 1 rows processed 実行後 統計 ---------------------------------------------------------- 281 recursive calls 27 db block gets 73 consistent gets 20 physical reads 3044 redo size 633 bytes sent via SQL*Net to client 825 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 7 sorts (memory) 0 sorts (disk) 1 rows processed そんなに影響がないということを証明したいのですが、上記統計で大したことないと証明できますでしょうか?

  • SQL*Plus のSAVEとGETコマンド

    現在、WindowsXP環境で、オラクル11g R2を勉強中です。SQL*Plus でSELECT文を1つ実行し、その後、SAVEコマンドを使ってバッファをファイルに保存しました。ファイルの中身は、メモ帳で開くと、以下のような感じです。 SELECT no FROM student / バッファをクリアして、このファイルをGETコマンドでバッファに読み込み、RUNコマンドで正常に実行できました。 今度は、違うSELECT文を実行します。次に、「SAVE ファイル名 APPEND」で、実行したバッファの内容を、先ほどのファイルに追加しました。ファイルの中身は、メモ帳で開くと、以下のような感じです。 SELECT no FROM student / SELECT no,name FROM student / ところが、バッファをクリアして、上記のファイルをGETコマンドで読み込み、RUNコマンドで実行すると以下のようなエラーになります。 SQL> run 1 SELECT no FROM student 2 / 3* SELECT no,name FROM student / * 行2でエラーが発生しました。: ORA-00933: SQLコマンドが正しく終了されていません。 APPENDで追加する前のSQL文では、問題なかったので、APPENDしたことで、最初のSQL文の終端がおかしくなったようです。気になるのは、SQL文の次の行に挿入されている / です。なぜ、このような文字が勝手に挿入されるのでしょうか?これは、Windows 環境が原因でしょうか?それとも、SAVE APPENDのバグでしょうか? 初歩的な質問で恥ずかしいのですが、原因や対策方法がおわかりの方がいらっしゃいましたら、教えていただけないでしょうか。

  • 実行したSQLファイルの名前をファイルに出力する方法

    1つのSQLファイルの中で、複数のSQLファイルの実行するようになっていて、それを1度に実行するようにしているのですが、途中でエラーが発生している状態です。 どのSQLファイルでエラーが出ているか一目で分かるようにしたいのですが、SQLファイルの名前を実行結果と一緒にテキストファイルに出力したりできないでしょうか? sqlplusのspool機能では実行結果のみ出力されますが、複数のSQLファイルを実行した場合にどの段階でエラーが出ているのか分かりづらいのでよい方法があれば教えてほしいです。 よろしくお願いします。(DBはOracle 10gです。)