永続化のために Hibernate と HSQLDB を使用するオープン ソース Java アプリケーションがあります。私のすべてのおもちゃのテストでは、すべてが高速に実行され、すべてが良好です。ソフトウェアを数か月間連続して実行しているクライアントがいますが、その間にデータベースが大幅に拡大し、パフォーマンスが徐々に低下しました。最終的に、データベースに問題がある可能性があることに気づきました。ログ ステートメントからわかる限り、サーバー内のすべての計算は迅速に行われるため、これは DB に問題がある可能性があるという仮説と一致しています。
プログラムの通常のプロファイリングを行って、ホット スポットがどこにあり、何がかなりの時間を占めているかを把握する方法を知っています。しかし、私が知っているすべてのプロファイラーは、プログラム内の実行時間を監視し、外部リソースの呼び出しについては何の助けにもなりません。外部データベース呼び出しを使用してパフォーマンスを最適化する場所を見つけるプログラムをプロファイリングするために、人々はどのツールを使用していますか?
少し盲目的に検索すると、すでにいくつかのホット スポットが見つかりました。特定のクラスのすべてのオブジェクトを列挙して、存在するかどうかを調べる呼び出しがあることに気付きました。基準 [.setMaxResults(1)] への 1 行の変更は、その呼び出しを 0.5 秒から事実上瞬時に変更しました。また、1 回のトランザクション内でデータベースから同じ質問を何度もする場所も見られます。答えをキャッシュする方法はまだわかりませんが、本当に欲しいのは、この種のものをより体系的に探すのに役立つツールです。