On Fri, Jan 19, 2018 at 2:06 PM, Tomas Vondra <tomas.von...@2ndquadrant.com>
wrote:

>
>
> On 01/19/2018 06:03 PM, Claudio Freire wrote:
> >
> >
> > On Fri, Jan 19, 2018 at 1:53 PM, Konstantin Knizhnik
> > <k.knizh...@postgrespro.ru <mailto:k.knizh...@postgrespro.ru>> wrote:
> >
> >
> >
> >     On 19.01.2018 19:28, Pavel Stehule wrote:
> >>
> >>
> >>             When I've been thinking about adding a built-in connection
> >>             pool, my
> >>             rough plan was mostly "bgworker doing something like
> >>             pgbouncer" (that
> >>             is, listening on a separate port and proxying everything
> >>             to regular
> >>             backends). Obviously, that has pros and cons, and probably
> >>             would not
> >>             work serve the threading use case well.
> >>
> >>
> >>         And we will get the same problem as with pgbouncer: one
> >>         process will not be able to handle all connections...
> >>         Certainly it is possible to start several such scheduling
> >>         bgworkers... But in any case it is more efficient to multiplex
> >>         session in backend themselves.
> >>
> >>
> >>     pgbouncer hold all time client connect. When we implement the
> >>     listeners, then all work can be done by worker processes not by
> >>     listeners.
> >>
> >
> >     Sorry, I do not understand your point.
> >     In my case pgbench establish connection to the pgbouncer only  once
> >     at the beginning of the test.
> >     And pgbouncer spends all time in context switches (CPU usage is 100%
> >     and it is mostly in kernel space: top of profile are kernel
> functions).
> >     The same picture will be if instead of pgbouncer you will do such
> >     scheduling in one bgworker.
> >     For the modern systems are not able to perform more than several
> >     hundreds of connection switches per second.
> >     So with single multiplexing thread or process you can not get speed
> >     more than 100k, while at powerful NUMA system it is possible to
> >     achieve millions of TPS.
> >     It is illustrated by the results I have sent in the previous mail:
> >     by spawning 10 instances of pgbouncer I was able to receive 7 times
> >     bigger speed.
> >
> >
> > I'm sure pgbouncer can be improved. I've seen async code handle millions
> > of packets per second (zmq), pgbouncer shouldn't be radically different.
> >
>
> The trouble is pgbouncer is not handling individual packets. It needs to
> do additional processing to assemble the messages, understand the state
> of the connection (e.g. to do transaction pooling) etc. Or handle SSL.
>

I understand. But zmq also has to process framing very similar to the fe
protocol, so I'm still hopeful.

Reply via email to