2

WCFバックエンドを備えたASP.NETMVCを使用して、エクストラネットローンステータスチェックWebサイトを構築しています。WCFサービス参照を使用して顧客オブジェクトを取得するMVCサイトを使用したかなり標準的な設計です。このサービスはOracleバックエンド+httpバインディングを使用し、MVCサイトと同じサーバーでホストされません(したがって、レイテンシを短縮するためにtcpバインディングを使用することはできません)。

私たちが遭遇した問題は、サービスへのすべての呼び出しが7〜8秒の応答時間をもたらし、これはエクストラネットサイトでは受け入れられず、2秒のマジックマークよりもはるかに長いことです。サービスメソッドは、12個のストアドプロシージャを呼び出して、顧客オブジェクトを作成します。残念ながら、データベースは非正規化されているため(他の社内本番システムでも使用されているため、変更できません)、ほとんどの呼び出しは、顧客オブジェクトとそれに関連するオブジェクトにデータを入力する基本的なselectステートメントです。サービスプロキシはMVCアクションで適切に開かれ、閉じられ、破棄されるため、サービス接続のリークは発生しません。リクエストごとに新しいクライアントプロキシが作成されます(つまり、サービスにシングルトンパターンを使用していません)。

これをどのようにスピードアップできるかについてのアイデアはありますか?

ありがとう

4

2 に答える 2

1

問題がどこにあるかはすでにわかっているようです。それはデータベースです。

内部のロジックを除いて、セットアップと破棄に1秒以上かかるWCF操作について聞いたことがありません。したがって、1〜2秒の遅延を短縮できたとしても(おそらく楽観的な見積もりです)、データベース操作自体に5〜6秒かかる場合は、実際には役に立ちません。

本音をいうと?顧客を作成するために12のストアドプロシージャを実行することは、完全に壁から外れています。ストアドプロシージャの目的は、複雑なデータベース操作を実行するために必要なすべてのロジックをカプセル化することです。最初に行う必要があるのは、これを1つのストアドプロシージャに変更することです。それでも遅い場合は、データベースのプロファイルを作成して、時間がかかることを確認し、それに応じて修正します。通常、データベースのパフォーマンスが低下するのは、1つ以上のインデックスが欠落しているためです。

于 2010-02-13T05:19:32.923 に答える
0

実際に何が起こっているのかを正確に測定するまでは、ボトルネックがどこにあるかをすぐに推測しないでください。

その速度低下がどこから来ているのかを確認するには、Oracle拡張SQLトレースを実行する必要があります。それ以外はほとんど当て推量です。これは、Cary Millsap(Method Rおよび以前はHotsosの)からの論文であり、これを実行して詳細をダウンロードできます。

http://method-r.com/downloads/doc_details/10-for-developers-making-friends-with-the-oracle-database-cary-millsap

于 2010-02-13T19:00:27.163 に答える