2011-12-06 19 views
0

私はSpring 2.5を使用しています。 apache-commons-dbcp接続プーリングを使用するSimpleJdbcTemplateまた、クエリが実行されたときにスレッドを生成するスレッドプールもあります(複数のクエリが実行され、それらの結果がすべて完了した時点で処理されるため、スレッドは並列にクエリを実行するように生成されます)。DB接続飢餓

最終的に、すべてのスレッドはTIMED_WAITのgetConnection()を待機しています。どのスレッドもConnectionを取得していないようです。私はDBをチェックし、接続はすべてアイドル状態です。

この原因は何ですか?私は最大プールサイズと50-100スレッドとして10の接続があります。これをどのように設定する必要がありますか? DBAは、それが十分な接続でなければならないと言います(そして、すべてがアイドルなので私は同意します)。

SimpleJdbcTemplateのデータソースとしてもBoneCPと同じことが起こります。

+0

接続を明示的に閉じないでください。 –

+1

OPが適切に処理する 'SimpleJdbcTemplate'を使用しているのでOPが接続を終了していないとは思わない。しかし、明らかに、これが最初に試すものです。しかし、これらの接続がアイドル状態であることは確かですか? 100スレッドと10コネクションしかありません... SQLクエリがスレッド時間の大部分を占める場合、残りの10個は実際にクエリを実行しています(おそらく 'socketRead'の結果を待っています)。 **すべての**スレッドが待っていますか? –

+0

SimpleJdbcTemplateはそれらを閉じるべきです。スレッドでJConsoleを見て、はい、それらのすべてが待っています。クエリは、平均500ミリ秒未満で完了します。私は15分以上それを残して、遅いクエリではないことを確認しました。結果はありません。 – dontocsata

答えて

2

ResultSetをループする途中で別のクエリが開始されたため、十分な最初のクエリでは2番目のクエリが接続できず、すべてがデッドロックしていたためです。

関連する問題