[pgpool-general: 348] Re: pgpool-3.1.2 and jdbc driver
Bryan Varner
bvarner at polarislabs.com
Thu Apr 5 22:04:14 JST 2012
I have submitted patches to pgpool starting in October 2011 to correct
this issue. I have yet to see any of them accepted.
The issue is that pool_where_to_send is being called for every step of
query planning / binding, instead of just the initial step (extended
protocol).
In cases where load demands that the query be redirected to a different
server than binding originally started on, or that it gets executed on a
different backend than previously bound to, the query will fail since it
will have different id's on the various backends, and the JDBC driver
tracks precompiled IDs and uses those for it's performance tweak with
extended query support.
The easiest solution is to just stop calling pool_where_to_send for each
step, and to trust where things were balanced to originally, and use
synchronous replication. The issue is that if you're using asynch
replication, and the backend the query was bound to is marked out of
synch (not able to direct queries to it) then you'll still experience
this issue.
I have all but ruled out pgpool as a long-term solution for
load-balancing pg due to this issue being understood, identified, and
unresolved for more than 9 months. I've gotten little to zero feedback
on the patches I've submitted, and have no idea why they've not been
accepted.
Your options at this point with JDBC and pgpool in replication mode are:
* Turn off load-balance, and use pgpool for HA only.
* Turn on load-balance, and disable the JDBC driver prepareThreshold
(I think it's -1?) This may not work well either, and will have
disastrous impact on performance.
* Cross your fingers that this gets resolved, now that there's more
than one person complaining about it.
Regards,
- Bryan Varner
On 04/05/2012 04:01 AM, Евгений Селявка wrote:
> Dear users, I have installed postgresql-9.1.3 in streaming replication
> mode and pgpool-3.1.2 only in load balancing mode. In log i see message
> like this
>
> 2012-04-04 15:47:39 LOG: pid 16968: pool_send_and_wait: Error or notice
> message from backend: : DB node id: 0 backend pid: 4664 statement:
> SELECT 1 message: portal "" does not exist
>
> I have jdbc: 9.0-801.jdbc4
> And pooling connection with java dbcp
>
> <bean id="Ds" class="org.apache.commons.dbcp.BasicDataSource"
> destroy-method="close">
> <property name="driverClassName" value="org.postgresql.Driver" />
> <property name="url"
> value="jdbc:postgresql://${db.server}:${db.port}/${db.name
> <http://db.name>}" />
> <property name="username" value="${db.user}" />
> <property name="password" value="${db.pass}" />
> <property name="maxActive" value="${db.connections.max_active}" />
> <property name="maxIdle" value="${db.connections.max_idle}" />
> <property name="maxWait" value="30000" />
> <property name="validationQuery" value="SELECT 1" />
> <property name="removeAbandoned" value="true" />
> <property name="removeAbandonedTimeout" value="60" />
> </bean>
>
> While googling i see that this bug was fixed in version pgpool-3.0.3?
>
> --
> С уважением Селявка Евгений
More information about the pgpool-general
mailing list