3

Postgres 9.1でTomcat7を使用し、HibernateでJPAを使用しており、プリペアドステートメントプーリングを構成したいと思います。

postgresクエリログを見て私が見た通常のデフォルトの動作は、同じクエリに対して実行される多くのPARSE、BINDを確認することです。したがって、jdbcプリペアドステートメントが使用されていても、postgresjdbcドライバーによってキャッシュされていないようです。またはサーバー上。

オンラインで読んだことは、postgres jdbcドライバーでプリペアドステートメントプーリングを構成する必要があることを示しているようだったのでconnectionProperties="prepareThreshold=3"、アプリケーションのcontext.xmlリソース定義に追加しましたが、まだキャッシュが行われていないので、PARSE、BINDメッセージがたくさんありますログファイルで、3回以上実行するプリペアドステートメントを取得した場合でも。

クエリプランナーは、パラメーターが渡されたステートメントほどプリペアドステートメントの計画を立てることができないことを認識しています。Hibernateを使用しているため、データベースに送信されるすべてのステートメントはJDBCプリペアドステートメントになるため、それについて私ができることは何もありません。

私が取り組んでいるアプリケーションはまだ本番環境にないので、プリペアドステートメントキャッシングを構成することの価値についてのフィールド測定はありませんか?postgresとhibernateを使用すると、一般的に現実の世界でパフォーマンスが向上しますか?

dbcpプールではなくpostgresとtomcat7jdbcプールを使用してプリペアドステートメントキャッシングを正常に構成することを知っている人はいますか?私の設定は以下の通りです。

<Resource 
        name="jdbc/thedb"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        auth="Container"
        type="javax.sql.DataSource"

    jmxEnabled="true"
    logAbandoned="true"
    suspectTimeout="60000"
    jdbcInterceptors="StatementFinalizer;ResetAbandonedTimer"

    driverClassName="org.postgresql.Driver"
    url="jdbc:postgresql://127.0.0.1:5432/thedb"
    username="theusername" 
    password="thepassword" 
    connectionProperties="prepareThreshold=3"

    maxActive="20"
    maxIdle="20" 
    minIdle="3"        
    maxWait="5000"

    testOnBorrow="true"
    validationInterval="30000"
    validationQuery="SELECT count(*) FROM data_source_test"
/>
4

1 に答える 1

1

準備されたステートメントのプールは、Tomcat jdbc プールではサポートされていないと思います。ドキュメントには、「poolPreparedStatements」について「[...] プロパティが使用されていません」と記載されています。

多分これはあなたに役立つでしょう: Tomcat jdbc プールに関するニュース

于 2012-10-23T21:24:47.553 に答える