2
  • Web アプリケーションのパフォーマンスのハードルを克服した個人的な経験はありますか?
  • データ駆動型 Web アプリケーションのパフォーマンスを改善するために推奨される戦略はありますか?

私の開発チームは、Oracle データベース (PL/SQL) を使用する Web アプリケーション (JSP レポート、HTML、JavaScript) に取り組んでいます。このアプリケーションが提供する主要な機能は、ユーザーが高レベルのレポートの PDF を取得し、下位レベルのサポート詳細にドリルダウンできるレポート機能です。

サポートする詳細レコードの数が数百万に達すると、システムのパフォーマンスが大幅に低下します。メトリックの現在の分析に基づくと、ボトルネックは DB にヒットするロジックと DB パフォーマンスにあるようです。DB モデルを変更し、サーバー側のロジックの一部をやり直すことは、現在調査中です。

パーティショニング、インデックス作成、Explain Plan、および実行中の統計は、パフォーマンスを向上させるために DB 側で行われたことです。彼らは助けてくれましたが、問題を十分に解決していません。パフォーマンス データの分析で最も難しいのは、データベースと Web サーバーが IT 組織の別の部門によってリモートで管理されていることです。そのため、開発者は何が起こっているかを確認するための通常の完全なアクセス権を持っていません (特に運用環境では、他の開発/テスト環境では正確に反映されません)。

4

6 に答える 6

6

私の答えには、これを支援するための具体的な手順が含まれていない場合がありますが、常にここから始めます。

私が最初にすることは、問題が何であるかについてのあなたの仮定をすべて捨てて、できる限りあらゆる場所にメトリックをインストールするための措置を講じることです. 直感ではなく、メトリクスに導かれましょう。私はたくさんの、たくさんの、たくさんの白うさぎを追いかけてきました。

于 2008-08-22T15:58:41.987 に答える
2

事前にデータを構築することを検討しましたか? つまり、何度も要求されるデータのグループはありますか? その場合は、ユーザーが尋ねる前に準備しておいてください。キャッシングについて正確に話しているわけではありませんが、それは方程式の一部だと思います。

コードから一歩離れて、システムの使用パターンを調べる価値があるかもしれません。たとえば、毎月の在庫や販売情報を表示している場合、ユーザーはそれを月末にしか見ませんか? その場合は、最終日にデータを構築して保存してください。彼らが毎日それを見る場合は、前の日の結果を作成して結果を保存し、計算を避けるようにしてください。最終的には、動的プログラミングのソリューションを勧めていると思います。答えを知っている場合は、再度解決しないでください。

于 2008-08-22T16:03:46.513 に答える
2

これをチェックしましたか?

Yahoo! の Exceptional Performance チームによるWeb ページを高速化するためのベスト プラクティス

バックエンドで本当に問題が発生している場合、これは役に立ちません。しかし、私たちはサイトを高速化するために彼らのアドバイスを大いに活用しましたが、やるべきことはまだあります。

また、Firebug 用の YSlow アドオンも使用してください。実際の時間が費やされている場所を確認すると、驚くかもしれません。

于 2008-08-22T16:41:31.010 に答える
1

Not all profilers cost (extra) money. For .Net, I'm successfully using an old build of NProf (currently abandoned but it still works for me) for profiling my ASP.Net applications. For SQL Server, the query profiler is part of the package. There's also the CLF Profiler from MS but I've never been able to get it to work successfully.

That being said, profilers are definitely the way to go. That way you can see where your program is spending most of its time, and not focus on things that you think are slow. Plus it means you don't have to write anything in your code to actually record the metrics.

As I hinted to at the beginning, there are different types of profilers. The three I find most useful are application profilers, which let you see which functions you actually spend most of your time in. The second is SQL profilers that let you see how long your queries take to run. The third is memory profilers, which help to show you what type of objects your memory is being used up by. All three of these are really useful, and although you won't use them every day, the times you do use them will save you a lot of headache.

于 2008-08-22T16:24:59.613 に答える
1

Webjedi が言うように、メトリクスは友達です。

また、スタックを見て、キャッシングの機会がある場所を確認してください。それから、可能な限り容赦なく採用してください。

于 2008-08-22T16:04:00.647 に答える
1

私が別の質問で言ったように:

プロファイラーを使用します。はい、お金がかかりますし、それらを使用するのは少し面倒な場合もありますが、当て推量ではなく、より多くのより現実的な証拠を提供します.

人間は、パフォーマンスのボトルネックがどこにあるかを推測するのが一般的に苦手です。それは、私たちの脳があまりうまく機能しないように作られているようです。当たり前のように思えるかもしれませんし、問題が何であるかについて素晴らしいアイデアを持っているかもしれませんが、現実の世界ではしばしば別のことをしていることが判明します。また、コードの間違った部分を最適化するということは、せいぜい、最小限の利益のために多くの作業を行うことを意味します。多くの場合、物事が遅くなり、時には物事が完全に壊れます。したがって、最適化のために変更を加える前に、プロファイラーまたはその他の正確なツールから実際の証拠を常に入手する必要があります。

于 2008-08-22T16:04:19.867 に答える