• 締切済み

チューニング対象のSQLの見つけ方・「遅い」SQLの目安

whiteline507の回答

回答No.1

はっきりと申し上げて無いと思いますね。 おっしゃるとおり データ数や結合テーブル数・条件の複雑さによって一概には言えません。 INSERTであればまだある程度は言えると思いますが、 UPDATEやDELETEもwhere句が入ればインデックスのあるなしやテーブル 削除対象件数などでどうとでも変わってきますし、 ましてやSELECT文であれば中間表、DISKの速さ、フェッチ件数 などでいくらでも変わってきます。 フェッチ件数が10件、結合するテーブルの件数がそれぞれ10万件件、 結合テーブル数が3個、結合方式が内部結合のハッシュジョイン、 orderby,groupbyは無し、DISKのアクセス速度は2msec、 DBキャッシュにはヒットしないこととし、ハードパースも走ることとする。SQL文の長さは200文字程度といった程度の情報があって やっと±500%くらいのブレでやっと見積もれると思います。 と言っても机上で見積もる方法はなく、それと同じ環境を作って試すだけなのですが。 あと、1msecであればチューニングしなくてもよいというのも間違いです。1msecのSQLが100万回実行されているなら 100秒かかっている1回だけ実行されているSQLよりも優先してチューニングするべきです。 もちろん「1msecより0.1msecでも縮められる場合は」ですが。 データベースを勉強している人はよく陥りがちなのですが、 SQLを速くすることがメインの目的では無いのです。 あくまで誰かが使うアプリケーションを速くすることが目的で そのためにアプリケーションが内部で発行しているSQLを速く するのです。0.1msecのSQLが速い遅いを決めるのではなく、 「このアプリケーションのこの処理を何秒で返せるようにする。」 それが目的です。 SQL個々の処理時間の目標を決めるのではなく、 DB全体を見渡してのボトルネックの特定とそのボトルネックを一つ一つ改善していくことが一番のアプリケーション高速化の近道だと思います。

mibusys
質問者

お礼

ありがとうございました。

関連するQ&A

  • MySQLのチューニングについて

    チューニングについて質問です。 1. SQLの純粋な実行速度を知るにはどうしたらよいか 2. SQLの叩かれる回数が多い場合にレスポンスが遅くなるのはどう対応すればよいか 1については、純粋に単体での実行時間が知りたいのですがSQLのキャッシュが残っているせいか、高速に処理されてしまうために、なかなか正確な時間が分かりません。 どのようにしたら単体での実行速度を計測できるのでしょうか。 2については、SQL単体ではなかなかの速度が出せているのに、そのSQLが短時間に大量に呼び出される場合に、サーバの負荷があがり、レスポンスが遅くなってしまう場合はどう対処すればよいのかを聞きたいです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • クエリの実行時間の目安

    クエリのパフォーマンスチューニングを勉強し始めたのですが、クエリの実行時間の良し悪しはどのように判断したらよいのでしょうか? 実行にかかった時間の目安などはあるのでしょうか? ちなみに、MySQL5.5を使用しています。 以上、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Oracleのチューニングについて

    あるWebアプリケーションの一部の処理が、最近極端に処理が遅くなったと感じているものがあります。 アプリケーションの仕様も変えていない(確実とは言えません)と思いますので、OracleDB側(チューニング)の問題ではないかと疑っております。 いろいろチューニングについて調べたところ、まず「データ・ブロック数を減らす」という点を確認しようと思っています。 無駄なブロック数を減らそうとした場合、暫定的な対応にはなりますが、一度データをtruncateしてからデータを再挿入すると、きれいな状態でデータブロックが再生成される、という認識でよいのでしょうか? (一度truncateしても処理スピードが変わらない場合は、「データブロック」の問題ではない、という判断で良いでしょうか?) 逆に上記で変わらない場合は、DB側で確認すべき点・何か原因として怪しいと考えられる点はありますでしょうか? 宜しくお願い致します。

  • 1リクエストにおけるsqlの発行回数の目安

    ふと気になったのですが、Webアプリケーションにおいて、1リクエスト中の実行されるsqlの数に目安は あるのでしょうか? システム規模にもよるかと思いますが、目安で、このくらいの規模だったらいくつみたいなものはあるのでしょうか? もちろん、発行回数というよりかは、クエリ処理にかかるトータルの時間を下げるためにクエリ回数をへらることが重要という事ではありますが、存在するようでしたら、目安として発行回数を知っておきたいと思います。 宜しくお願い致します。

  • SQLの性能に関して

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

  • SQLの性能

    クエリアナライザで実行すると30秒くらいかかるようなSQLがあるのですが、修正の余地について教えてください。 抽出元となるテーブルのレコード数が多くても、クエリの書き方やインデックスの張り方で速くなるのは知っていますが、限界はないのでしょうか? 単純に抽出元となるテーブルのレコード数が多いことが原因なのか、クエリやインデックスが原因なのかを判断する方法を教えてください。

  • チューニングの基礎について教えて下さい

    vb.net+mysql(OS:WindowsXP)で趣味のコーディングをしています。 動かしているのは、毎日20時間程度かけて実行しているバッチ処理です。 各テーブルに、最大で数百万~1千数百万レコード程度を格納しています。 最近、プログラム内で、mysqlが何の例外も吐かずに止まってしまう(もしくは落ちている?)という現象が多発しています。 現象が起きるSQL文は毎日違い、同じSQLでも、値が返ってくる日と返って来ない日があります。 mysqlの全体的なチューニングが必要なのだろうと思っているのですが、 とりあえずmysqlの各種パラメータの監視をする必要があるのだろうなと思っています。 何か典型的な手法などはあるでしょうか。 (show status で返ってくる値を監視しときゃいいんだよ、とどこかで見た気がするのですが、  それってみんな自分でイチから監視プログラムをハンド作成しているのでしょうか?) よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 処理速度の改善について

    PL/SQLにて大量のデータを処理しているのですが、処理に時間が掛かりすぎる為、SQLのチューニングを考えています。 まずどういう所から見ていけば良いでしょうか? また、INDEXを指定すると良いのかな、と思うのですが、PL/SQL内でINDEXの指定は出来ますか? /*~*/でコメント文と見なされているように思うのですが。

  • バキューム処理の実行時間の目安

    かなりざっくりな質問で申し訳ないのですが サーバーパフォーマンスは一般的なものとしてお考えいただき 10テーブル カラム平均数15くらいで 1日に蓄積される不要レコードが約5万くらいの場合 vacuumdb の実行時間はどのくらいなのでしょうか。 数秒、数分、30分以上、1時間以上など ざっくりでいいのでご教授ください。 また、これらの情報に関する有益なサイト等ご存知の方いらっしゃいましたら、よろしくお願いします。

  • Access97からAccess2003に移行したときの問題点

    VB4→VB6へ、SQLサーバ7→2000へ、Access97→2003へ移行を行っています。 旧システムでは、約5秒で完了する処理が、移行後は、2分51秒かかります。 どのような処理かというと、  1.SQLサーバのデータをSELECT  2.AccessのテーブルにINSERT(もしくは、UPDATE)  3.Accessのクエリ実行  4.Accessのレポート表示 です。 新旧比較してみたのですが、1.SQLサーバのデータのSelectは、差はありません。 2.AccessのテーブルにInsertでは、  Access97は、1秒、2003は、45秒です。 Updateとなると、Access97では、4秒、2003は、2分5秒となりました。 新システムの方が、遅くて性能が悪いようです。 どのように、チューニングしたらよいでしょうか? また、原因等、ご存知でしたら、教えていただけないでしょうか? よろしくお願いします。