2011-07-21 21 views
0

私たちはデータベース接続プール(java JDBC)を持っています。私たちがチェックアウトするたびに、接続例外を避けるためにまず先制的な接続ロールバックを行います。ビジネスケースを無視してください。技術的な観点から見ると、JDBC接続のロールバックはアプリケーションのパフォーマンスに大きな影響を与えますか?Java、JDBC接続プール、JDBC接続ロールバック

答えて

2

接続プールから直接送られる接続をロールバックする必要がある理由を理解できません。彼らの状態はアイドルでなければなりません。さもなければあなたはプールからそれらを得ることができませんでしたか?

トランザクションはパフォーマンスに影響します。 ロールバックできるトランザクションよりも多いトランザクションがある場合、ダングリングトランザクションがそれらをブロックしているために実行できないクエリが存在する可能性があります。

アプリケーションがタイムクリティカルな場合は、コードを最適化するために時間をかけてください。必要な場所でのみトランザクションを使用してください。

2

接続ロールバックはありません。おそらく、トランザクションのロールバックを意味するでしょう。トランザクションでデータベースに加えられた変更を失う場合を除き、ロールバックしないでください。トランザクション内のすべての変更をコミットしない限り、コミットしないでください。

私は「接続例外を避けるためにまず先制的な接続ロールバックを行う」という言葉は理解していません。 Connection.rollback()メソッド呼び出しを指していると仮定すると、悪い習慣とみなされます。実際にはネットワークコールが必要となるため、パフォーマンスが低下し、関連するトランザクションの状態を破棄することになります(このシナリオでは意味がありません)。

接続プールから取得したデッド接続に関する例外を回避する場合は、アプリケーションに接続を戻す前に、接続が古くないかどうか(通常はテストSQL文を実行して)を確認するようプールを構成する必要があります。アプリケーションが接続を取得すると、接続が不要になった後に接続を維持する必要はありません。アプリケーションは理想的には接続をプールに戻す必要があります。接続オブジェクトの周囲に物理的な接続が残っている場合は、他の要求で使用できず、特定の期間を超えて接続された接続を閉じるように構成されたファイアウォールによって実際に閉じられます。

1

完全にマナに同意します。

プールから接続を「チェックアウト」してから作業してからプールに戻します。

JBoss Connection Poolingロジックを見てみるか、プロダクショングレードの接続プールパッケージを参照してください。

Connection pooling options with JDBC: DBCP vs C3P0

1

での議論は、プールからの接続を検証するための適切な方法はvalidation queryを使用することであります。プールに返された「汚れた」接続がある可能性があるため、ロールバックがある場合は、real resource management frameworkを使用する必要があります。