[pgpool-general: 1836] Re: PgPool vs any modern programming language.

Tatsuo Ishii ishii at postgresql.org
Fri Jun 7 12:12:55 JST 2013


From: David Kerr <web at mr-paradox.net>
Subject: Re: [pgpool-general: 1828] PgPool vs any modern programming language.
Date: Thu, 6 Jun 2013 19:50:30 -0700
Message-ID: <91EAA4A5-2312-40A7-9377-B4BE50663375 at mr-paradox.net>

> On Jun 6, 2013, at 7:34 PM, Tatsuo Ishii <ishii at postgresql.org> wrote:
> 
>> From: David Kerr <web at mr-paradox.net>
>> Subject: Re: [pgpool-general: 1828] PgPool vs any modern programming language.
>> Date: Wed, 5 Jun 2013 19:12:31 -0700
>> Message-ID: <FF354E40-3566-48F5-822B-FD169D800EC3 at mr-paradox.net>
>> 
>>> 
>>> On Jun 5, 2013, at 6:24 PM, Tatsuo Ishii <ishii at postgresql.org> wrote:
>>> 
>>>>> All Rails, Django and many Java (c3po) implementations have client side connection pools.
>>>>> 
>>>>> I don't believe that they can be disabled. You can set them to 1 / (thread|process)
>>>>> but that's still many per server.
>>>>> 
>>>>> This means that for every Rails process there is one of these sitting on PgPool at 
>>>>> application startup:
>>>>> 
>>>>> pgpool   16099 15924  0 00:36 ?        00:00:00 pgpool: app app 192.168.10.19(40509) idle
>>>>> pgpool   16100 15924  0 00:36 ?        00:00:00 pgpool: app app 192.168.14.27(57314) idle
>>>>> pgpool   16101 15924  0 00:36 ?        00:00:00 pgpool: app app 192.168.10.218(37869) idle
>>>>> pgpool   16102 15924  0 00:36 ?        00:00:00 pgpool: app app 192.168.10.48(37278) idle
>>>>> pgpool   16103 15924  0 00:36 ?        00:00:00 pgpool: app app 192.168.10.106(53541) idle
>>>>> 
>>>>> If a single app sever has a pool size of 10.  And i have 10 servers.
>>>>> 
>>>>> That's 100 _persistent_ connections to PgPool. (and hence the DB)
>>>>> 
>>>>> To accomidate that I need 100 initial children and 100 max_connections on the postgres side.
>>>>> 
>>>>> That sort of defeats the purpose of pooling. 
>>>>> 
>>>>> Ideally, I want PgPool to protect my database from overzealous application deployments
>>>>> while still giving them all a chance to serve requests.
>>>>> 
>>>>> Is this possible?
>>>>> 
>>>>> How are other people handling this?
>>>> 
>>>> Does pgbouncer's "transaction pooling" help? Or those middlewares
>>>> require session based pooling like pgpool?
>>> 
>>> Hmm. I had various levels of success with pgbouncer / transaction pooling with Java.
>>> I haven't tried it yet with Rails. Disabling prepared transactions was difficult in the
>>> java world. it may be easier in the ruby world.
>>> 
>>> of course then I don't get the load balancing of PgPool which is pretty impactful.
>> 
>> I think you can set client_idle_limit to other than 0, which will kill
>> an idle conection client to pgpool, then it gives a change other
>> client connects to pgpool. Thus you can lower the number of initial
>> children and max_connection. Downside of this, the client pooler may
>> think that is a trouble and stop working, rather than creating a new
>> connection to pgpool.
>> 
>> BTW, does pgbouncer handle your requirement better than pgpool(besides
>> connection pooling)? If so, pgpool maight be able to learn something
>> from it.
> 
> 
> I do currently set client_idle_limit to 300 actually because of the JDBC hanging connections
> problem. It seems like in a high transaction environment i'd have to set that much lower
> and that may be a bit of a performance hit
> 
> I think in my current environment Transaction Pooling + Load Balancing would be 
> a huge win.

Ok. So in other word, pgbouncer in *session mode* does not help you. I
just want to confirm your requirement.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


More information about the pgpool-general mailing list