Apache::DBI overrides DBI's connect() method so that you're using
persistent connections when you use DBI directly.  It may be that your
performance improvement came from better management of Pg resources
with PgBouncer than from reducing connection overhead.  You could test
it be removing Apache::DBI and benchmarking.

- Perrin

On Tue, Apr 22, 2014 at 12:33 PM, John Dunlap <j...@lariat.co> wrote:
> use Apache::DBI (); appears in our startup.pl but the application code uses
> DBI directly.
>
>
> On Tue, Apr 22, 2014 at 12:30 PM, Perrin Harkins <phark...@gmail.com> wrote:
>>
>> Thanks John.  Were you using Apache::DBI before PgBouncer?
>> Apache::DBI would also eliminate the overhead of establishing new
>> connections.
>>
>> - Perrin
>>
>> On Tue, Apr 22, 2014 at 12:23 PM, John Dunlap <j...@lariat.co> wrote:
>> > I can speak to your final point. I recently deployed PGBouncer into our
>> > production environment and, like the OP, we have separate web and
>> > database
>> > servers. With PGBouncer running on the web server(you could also run it
>> > on
>> > the database server if you wanted to) we noticed a dramatic increase in
>> > performance. I haven't looked into it in detail but my best guess is
>> > that
>> > running the pool on the web server eliminates the overhead of
>> > establishing
>> > new connections(DNS lookups, establishing TCP connections,
>> > authentication,
>> > waiting for the database to spool up a new process, etc).
>> >
>> >
>> > On Tue, Apr 22, 2014 at 12:18 PM, Perrin Harkins <phark...@gmail.com>
>> > wrote:
>> >>
>> >> Interesting.  Why did you have to install PgBouncer?  Can't Postgres
>> >> handle remote connections from your web server?
>> >>
>> >> I don't use Postgres, but reading the description of PgBouncer I can
>> >> see some things you'd want to consider.
>> >>
>> >> First, Apache::DBI prevents you from making persistent connections
>> >> before the parent process forks.  If you don't use it, you should
>> >> check your code to make sure that it closes any handles it opens
>> >> during server startup.
>> >>
>> >> Second, there's the issue of what happens when your code throws an
>> >> exception.  Apache::DBI will issue a rollback on any active handles
>> >> that aren't in autocommit mode after each request.  If you don't use
>> >> it, I'd suggest adding your own cleanup handler to do a rollback.
>> >>
>> >> Finally, there's the issue of performance.  It's not clear whether DBI
>> >> connects faster when using PgBouncer.  You should probably benchmark
>> >> that yourself.  You may still get a significant speed boost from
>> >> caching the connections (with Apache::DBI) on the client side.
>> >>
>> >> - Perrin
>> >>
>> >> On Tue, Apr 22, 2014 at 10:02 AM, jbiskofski <jbiskof...@gmail.com>
>> >> wrote:
>> >> > I just want to confirm something with all you smart folks.
>> >> >
>> >> > I recently separated my web servers from my database servers, before
>> >> > I
>> >> > was
>> >> > using Apache::DBI to maintain persistent connections between Apache
>> >> > and
>> >> > Postgres. With this new setup I had to install PgBouncer. Can I now
>> >> > safely
>> >> > remove Apache::DBI from my application and use regular DBI ??
>> >> >
>> >> > Thank you.
>> >> >
>> >
>> >
>
>

Reply via email to