私は、持続性のためにHibernateとHSQLDBを使用するオープンソースのJavaアプリケーションを持っています。すべての私のおもちゃのテストでは、物事は速く実行され、すべてが良いです。私は数ヶ月間このソフトウェアを継続的に稼動させてきたクライアントがおり、その間にデータベースは大幅に成長し、パフォーマンスは徐々に低下しました。最終的にデータベースが問題になる可能性がありました。私がログ・ステートメントから知る限り、サーバー内のすべての計算が迅速に行われるため、これはDBが不完全であるという仮説と一致しています。hsqldb/hibernateアプリケーションのパフォーマンスをチューニングする方法
私は、プログラムの通常のプロファイリングを行って、ホットスポットがどこにあり、何がかなりの時間を費やしているのかを理解する方法を知っています。しかし、私が知っているすべてのプロファイラーは、プログラム内の実行時間をモニターし、外部リソースへの呼び出しについてあなたに助けを与えません。パフォーマンスを最適化する場所を特定するために外部dbコールを使用しているプログラムのプロファイルに、どのツールを使用していますか?
少し盲目的に探し回っていますが、いくつかのホットスポットが見つかりました。特定のクラスのすべてのオブジェクトを列挙している箇所に気付きました。基準[.setMaxResults(1)]への1行の変更は、その呼び出しを0.5秒から事実上瞬時に変更しました。私はまた、データベースから同じ質問を1回の取引で何度も尋ねる場所も見ています。答えをキャッシュする方法はまだ分かりませんが、本当に欲しいのは、これらの種類のものをより体系的に探すのに役立つツールです。
私はDB構成でパフォーマンスチューニングを行っていません。私は、私の問題は、質問が不完全であるか、間違った質問を何回も繰り返す可能性が高いと想定していました。私はクエリとその費用の数を減らす方法を見つけ出したいと思っています。そして、その使用量を80%削減した後、キャッシングなどの負荷を減らしてdb自体をスピードアップします。しかし、私はDBの使用状況を調整する専門家ではありません。アプリケーションの前にDBを調整することを提案しますか? – PanCrit
問題が休止状態になっていることが確かであれば、DBを調整することは役に立ちません。 チューニングする前に、パフォーマンス上の問題の根を正確に追跡して最適化するためのプロファイラツールなどを使用してください。 残念ながら、簡単な方法はありません。良いニュースは:今日のIDEはすべて、まともなプロファイリングをサポートしています。 – razenha