3

Oracle 11G データベース (現在、10 ~ 12 の異なる Oracle データベースを接続しています) に接続する Java アプリケーション (Web ベース) を作成し、そこからデータを読み取る必要があります (すべて選択クエリです)。

この配列リストを繰り返した後、各データベースを接続し、select クエリを起動し (すべてのデータベースで起動したのと同じクエリ)、record を取得し、それを 1 つのグローバル コレクション リストに入れて接続を閉じ、このループで同じプロセスを続けます。

現在、私は複数のデータベースを接続する「実行者」です。もう一度使用し ExecutorService executor = Executors.newFixedThreadPool(20); て、私に1つの驚きを与えてください。最初のデータベース接続を作成する場合、すぐにログが表示されますが、後続のデータベース接続では 60 秒後にログが出力されるため、すべての接続で 60 秒以上かかる理由がわかりません。論理的には、すべての接続が同じように時間がかかるはずです。

このアプリケーションのパフォーマンス改善を提案してください。

4

1 に答える 1

0

データベース接続を開くのはコストのかかる操作です。可能であれば、各データベースに 1 回接続し、そのデータベースに対して行われるすべてのクエリに対してその接続を再利用する必要があります (接続プーリングとも呼ばれます)。これがあなたがすでに行っていることかどうかは明らかではありません。

奇妙に思えるもう 1 つのことは、openConnection メソッドを同期させたことです。コードの構造によっては、一度に 1 つのスレッドしか接続を開くことができない場合があります。接続には長い時間がかかるため、各スレッドが並行して接続を確立する必要があります。

于 2013-08-10T09:28:48.980 に答える