- PR -

ストアドの処理速度について

投稿者投稿内容
もこもこ
常連さん
会議室デビュー日: 2008/05/19
投稿数: 20
投稿日時: 2008-05-19 17:03
はじめまして、「もこもこ」と申します。

もこOrトニーと呼んでもらって結構でございます。冗談はさておき。

早速ですが、ストアドの処理速度について質問です。

ストアドを今回初めて作ったためソースには自信がないので、
ソースはとりあえず無しでの質問をお許しください。

開発環境は OS:WinXp CPU2.4GHz メモリ:1G ソース:ASP.NET DB:Oracle です。

まずクリックイベントでストアドが2本走ります。

開発環境でデバック実行するとストアド1本に対して、10分ほどの処理が走って
計20分ほどで処理が終わります。

しかし本番仕様テストサーバーでこれを実行すると最初の1本で40〜50分さらに2本目のストアドでタイムアウトしたのか処理が帰ってきません。

確実に私のPCよりもスペックは高いはずなのに、なぜこのような現象が起きるのかわかりません。

ちなみに現在稼動しているシステムではSQLべた書きで1時間少々かかるため、
今回ストアドで時間短縮を計ろうとしていました。
ストアドを作成し、開発環境で半分以下に処理を短縮できたので「OK!」と思いきやこんな現象が起きてしまい、困っております。

同じような経験をしたことがある。これじゃないの?などなんでも結構でございますので、どうぞよろしくお願いいたします。

尚、「それストアドが悪いよ!」と言う意見がございましたら恥ずかしながらご掲示させていただきます。////

七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-05-19 17:09
データ件数やINDEXが同じであるという仮定に基づけば、
統計情報が異なる場合があります。
そのため最適パスで実行できないのでは?

もこもこ
常連さん
会議室デビュー日: 2008/05/19
投稿数: 20
投稿日時: 2008-05-19 17:24
七味唐辛子さん、早速の返答ありがとうございます。

>データ件数やINDEXが同じであるという仮定
そのとおりでございます。説明不足でした。すいません。

>そのため最適パスで実行できないのでは?
最適パスで実行・・・質問を質問で返すのは心苦しいのですが、
最適パスとはなんに対してのパスでしょうか。経験不足でもうしわけありません。





masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2008-05-19 17:43
今まではアプリケーションからSQLを直接発行していたのを、
ストアドを呼び出すように変更してみたということでしょうか。

もし、SQLをほぼそのままストアドにしただけでは
SQL処理自体の高速化はあまり得られないと思います。
直接SQL文を発行した場合にはデータベースでSQL文の解析が行われますが、
ストアドの場合にはこの解析が行われない分だけ高速化します。
ですが、解析自体は何分・何時間というものではありません。

本番環境でレスポンスが落ちるということですが、
テスト環境に比べてデータ件数が多いのではありませんか?
一般に、SQL処理の負荷がある「閾値」を超えた場合には
メモリスワップが発生するなどして、加速度的にレスポンスは落ちます。

もこもこ
常連さん
会議室デビュー日: 2008/05/19
投稿数: 20
投稿日時: 2008-05-19 18:15
masaさん、早速の返答感謝します。

>もし、SQLをほぼそのままストアドにしただけでは
>SQL処理自体の高速化はあまり得られないと思います。
開発環境では、2倍の処理短縮が得られているので、ストアドにしてかなりの
高速化が得られたと思っております。しかしながら、それはあくまでこちら側の
意見なので参考にさせていただきます。

>本番環境でレスポンスが落ちるということですが、
>テスト環境に比べてデータ件数が多いのではありませんか?
dumpファイルにてデータ作り使用しているので、
データは全て同じデータです。

データは同じで、処理内容も同じ、Oracleのバージョンも同じ、
スペックは格段に上。なのに、開発環境のほうが数段に早い。

サーバー機では何か特別なことが起きているのでしょうか?

初心者的質問しかできなくて情けないです・・。よろしくお願いします。



七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-05-19 18:30
引用:

もこもこさんの書き込み (2008-05-19 17:24) より:
七味唐辛子さん、早速の返答ありがとうございます。

>データ件数やINDEXが同じであるという仮定
そのとおりでございます。説明不足でした。すいません。

>そのため最適パスで実行できないのでは?
最適パスで実行・・・質問を質問で返すのは心苦しいのですが、
最適パスとはなんに対してのパスでしょうか。経験不足でもうしわけありません。






参考資料
http://www.atmarkit.co.jp/fdb/rensai/oraobstacle04/oraobstacle04_1.html


本番環境の統計情報が古いためINDEXがあっても使われない場合があるということです。
そこでINDEXが使われているかどうかの判断は実行計画を取得すればわかります。
もちろん検索パターンによってはINDEXを使わないほうがよい場合もあります。
もこもこ
常連さん
会議室デビュー日: 2008/05/19
投稿数: 20
投稿日時: 2008-05-19 18:47
七味唐辛子さん

参考資料ありがとうございます。
参考にしてみましたところ、少し状況が違うようです。

>本番環境の統計情報が古いためINDEXがあっても使われない場合があるということです。

本番環境の統計情報は新しいものになっているはずです。しかしながら、万が一このようなことが原因だった場合は、開発PCで20分以下で終わる処理が、本番仕様テストサーバで60分以上などという結果が起こりうるのでしょうか?

また質問返しで申し訳ありません。参考資料ありがとうございました。引き続き目を通させていただきます。
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2008-05-19 20:56
saki1208です。

引用:

本番環境の統計情報は新しいものになっているはずです。しかしながら、万が一このようなことが原因だった場合は、開発PCで20分以下で終わる処理が、本番仕様テストサーバで60分以上などという結果が起こりうるのでしょうか?



あながちありえない話でもありません。
開発環境のOracleはチューニングが施してあって、本番環境ではチューニング未実施
等の場合に発生する可能性もあるのではないでしょうか。

過去に経験したシステムでは、本番機と全く同一のスペックのマシンを使用した状態
で、チューニング前が20分、チューニング後に数十秒となったものがあります。
※これはアプリケーションのチューニングではなく、Oracle環境(バッファ等のメモリ
 割り当て)チューニングによる結果です。

たぶんハズレですね。
自分のPCでOracleのチューニングをしているような人であれば、すでに確認している
ものと思います。




[ メッセージ編集済み 編集者: saki1208 編集日時 2008-05-19 20:58 ]

スキルアップ/キャリアアップ(JOB@IT)