java6/hibernate/c3p0/postgresql スタックを実行しています。JDBC ドライバーは 8.4-701.jdbc3 です。
プリペアド ステートメントについていくつか質問があります。プリペアド ステートメントに関する優れたドキュメントを読みました
しかし、postgresql で c3p0 を構成する方法についてはまだ疑問があります。
現時点では
c3p0.maxStatements = 0
c3p0.maxStatementsPerConnection = 0
私の理解では、準備されたステートメントとステートメントプーリングは2つの異なるものです。
私たちの休止状態スタックは準備済みステートメントを使用します。Postgresql は実行計画をキャッシュしています。次に同じステートメントが使用されると、postgresql は実行計画を再利用します。これにより、DB 内でステートメントを計画する時間が節約されます。
さらに、c3p0 は「java.sql.PreparedStatement」の Java インスタンスをキャッシュできます。これは、Java オブジェクトをキャッシュしていることを意味します。したがって、
c3p0.maxStatementsPerConnection = 100 を使用すると、最大 100 個の異なる
オブジェクトがキャッシュされます。オブジェクトを作成する時間を節約できますが、これは postgresql データベースとその準備済みステートメントとは関係ありません。
右?
約 100 の異なるステートメントを使用するため、c3p0.maxStatementsPerConnection = 100 を設定します。
しかし、c3p0 のドキュメントには、c3p0 の既知の欠点があると書かれています
ステートメント プーリングのオーバーヘッドが高すぎます。PreparedStatements の重要な前処理を実行しないドライバーの場合、プーリングのオーバーヘッドは節約を上回ります。そのため、ステートメント プーリングはデフォルトでオフになっています。ドライバーが PreparedStatements を前処理する場合、特に RDBMS を使用して IPC を介して行う場合は、Statement プールをオンにすることでパフォーマンスが大幅に向上する可能性があります。(これを行うには、構成プロパティ maxStatements または maxStatementsPerConnection をゼロより大きい値に設定します)。
c3p0 と Postgresql で maxStatementsPerConnection を有効にするのは合理的ですか? それをアクティブにする本当の利点はありますか?
よろしくジャニング