OSDN Git Service

Add pooling discussion.
authorBruce Momjian <bruce@momjian.us>
Wed, 11 Oct 2000 18:09:38 +0000 (18:09 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 11 Oct 2000 18:09:38 +0000 (18:09 +0000)
doc/TODO
doc/TODO.detail/pool [new file with mode: 0644]

index 65f6544..ffabcb7 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -255,6 +255,7 @@ MISC
 * Improve statistics storage in pg_class [performance]
 * Improve VACUUM speed with indexes [vacuum]
 * -BSD/OS does not support locale because there is no LC_MESSAGES (Bruce)
+* Add connection pooling [pool]
 
 SOURCE CODE
 -----------
diff --git a/doc/TODO.detail/pool b/doc/TODO.detail/pool
new file mode 100644 (file)
index 0000000..7d72d90
--- /dev/null
@@ -0,0 +1,641 @@
+From pgsql-hackers-owner+M4897@hub.org Wed Jul 12 00:15:33 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id AAA06129
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 00:15:32 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C4FiW14410;
+       Wed, 12 Jul 2000 00:15:44 -0400 (EDT)
+Received: from onyx-technologies.com (iron.onyx-technologies.com [216.205.44.194] (may be forged))
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C4ECW07902
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 00:14:12 -0400 (EDT)
+Received: from onyx-technologies.com (collins.onyx-technologies.com [192.168.188.10])
+       by onyx-technologies.com (8.9.2/8.9.0) with ESMTP id AAA14868
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 00:11:43 -0400 (EDT)
+Message-ID: <396BE1B6.F755C5CE@onyx-technologies.com>
+Date: Tue, 11 Jul 2000 23:10:46 -0400
+From: Jeffery Collins <collins@onyx-technologies.com>
+X-Mailer: Mozilla 4.7 [en] (X11; I; Linux 2.2.14-15mdk i686)
+X-Accept-Language: en
+MIME-Version: 1.0
+To: pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling.
+References: <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au>
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: ORr
+
+It seems like a first step would be to just have postmaster cache unused
+connections.  In other words if a client closes a connection, postmaster
+keeps the connection and the child process around for the next connect
+request.  This has many of your advantages, but not all.  However, it seems
+like it would be simpler than attempting to multiplex a connection between
+multiple clients.
+
+Jeff
+
+>
+> Alfred Perlstein wrote:
+> >
+> > In an effort to complicate the postmaster beyond recognition I'm
+> > proposing an idea that I hope can be useful to the developers.
+> >
+> > Connection pooling:
+> >
+> > The idea is to have the postmaster multiplex and do hand-offs of
+> > database connections to other postgresql processes when the max
+> > connections has been exceeded.
+> >
+> > This allows several gains:
+> >
+> > 1) Postgresql can support a large number of connections without
+> > requiring a large amount of processes to do so.
+> >
+> > 2) Connection startup/finish will be cheaper because Postgresql
+> > processes will not exit and need to reninit things such as shared
+> > memory attachments and file opens.  This will also reduce the load
+> > on the supporting operating system and make postgresql much 'cheaper'
+> > to run on systems that don't support the fork() model of execution
+> > gracefully.
+> >
+> > 3) Long running connections can be preempted at transaction boundries
+> > allowing other connections to gain process timeslices from the
+> > connection pool.
+> >
+> > The idea is to make the postmaster that accepts connections a broker
+> > for the connections.  It will dole out descriptors using file
+> > descriptor passing to children.  If there's a demand for connections
+> > meaning that all the postmasters are busy and there are pending
+> > connections the postmaster can ask for a yeild on one of the
+> > connections.
+> >
+> > A yeild involves the child postgresql process passing back the
+> > client connection at a transaction boundry (between transactions)
+> > so it can later be given to another (perhaps the same) child process.
+> >
+> > I spoke with Bruce briefly about this and he suggested that system
+> > tables containing unique IDs could be used to identify passed
+> > connections to the children and back to the postmaster.
+> >
+> > When a handoff occurs, the descriptor along with an ID referencing
+> > things like temp tables and enviornment variables and authentication
+> > information could be handed out as well allowing the child to resume
+> > service to the interrupted connection.
+> >
+> > I really don't have the knowledge of Postgresql internals to
+> > accomplish this, but the concepts are simple and the gains would
+> > seem to be very high.
+> >
+> > Comments?
+> >
+> > --
+> > -Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
+> > "I have the heart of a child; I keep it in a jar on my desk."
+
+
+From pgsql-hackers-owner+M4904@hub.org Wed Jul 12 01:24:09 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id BAA06757
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 01:24:08 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C5OLW65679;
+       Wed, 12 Jul 2000 01:24:21 -0400 (EDT)
+Received: from fw.wintelcom.net (bright@ns1.wintelcom.net [209.1.153.20])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C5MkW61040
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 01:22:46 -0400 (EDT)
+Received: (from bright@localhost)
+       by fw.wintelcom.net (8.10.0/8.10.0) id e6C5Md429901;
+       Tue, 11 Jul 2000 22:22:39 -0700 (PDT)
+Date: Tue, 11 Jul 2000 22:22:39 -0700
+From: Alfred Perlstein <bright@wintelcom.net>
+To: Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>
+Cc: pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling.
+Message-ID: <20000711222239.X25571@fw.wintelcom.net>
+References: <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.2i
+In-Reply-To: <396BEA84.1A06F51F@nimrod.itg.telecom.com.au>; from chrisb@nimrod.itg.telstra.com.au on Wed, Jul 12, 2000 at 01:48:20PM +1000
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+* Chris Bitmead <chrisb@nimrod.itg.telstra.com.au> [000711 20:53] wrote:
+> 
+> Seems a lot trickier than you think. A backend can only be running
+> one transaction at a time, so you'd have to keep track of which backends
+> are in the middle of a transaction. I can imagine race conditions here.
+> And backends can have contexts that are set by various clients using
+> SET and friends. Then you'd have to worry about authentication each
+> time. And you'd have to have algorithms for cleaning up old processes
+> and/or dead processes. It all really sounds a bit hard. 
+
+The backends can simply inform the postmaster when they are ready
+either because they are done with a connection or because they
+have just closed a transaction.
+
+All the state (auth/temp tables) can be held in the system tables.
+
+It's complicated, but no where on the order of something like
+a new storage manager.
+
+-Alfred
+
+From bright@fw.wintelcom.net Wed Jul 12 01:34:30 2000
+Received: from fw.wintelcom.net (bright@ns1.wintelcom.net [209.1.153.20])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id BAA06793
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 01:34:29 -0400 (EDT)
+Received: (from bright@localhost)
+       by fw.wintelcom.net (8.10.0/8.10.0) id e6C5Z1f00384;
+       Tue, 11 Jul 2000 22:35:01 -0700 (PDT)
+Date: Tue, 11 Jul 2000 22:35:00 -0700
+From: Alfred Perlstein <bright@wintelcom.net>
+To: Bruce Momjian <pgman@candle.pha.pa.us>
+Cc: Jeffery Collins <collins@onyx-technologies.com>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling.
+Message-ID: <20000711223500.Z25571@fw.wintelcom.net>
+References: <396BE1B6.F755C5CE@onyx-technologies.com> <200007120428.AAA06357@candle.pha.pa.us>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.2i
+In-Reply-To: <200007120428.AAA06357@candle.pha.pa.us>; from pgman@candle.pha.pa.us on Wed, Jul 12, 2000 at 12:28:46AM -0400
+Status: OR
+
+* Bruce Momjian <pgman@candle.pha.pa.us> [000711 21:31] wrote:
+> > It seems like a first step would be to just have postmaster cache unused
+> > connections.  In other words if a client closes a connection, postmaster
+> > keeps the connection and the child process around for the next connect
+> > request.  This has many of your advantages, but not all.  However, it seems
+> > like it would be simpler than attempting to multiplex a connection between
+> > multiple clients.
+> > 
+> 
+> This does seem like a good optimization.
+
+I'm not sure if the postmaster is needed besideds just to fork/exec
+the backend, if so then when a backend finishes it can just call
+accept() on the listening socket inherited from the postmaster to
+get the next incomming connection.
+
+-Alfred
+
+From pgsql-hackers-owner+M4906@hub.org Wed Jul 12 01:36:44 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id BAA06806
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 01:36:44 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C5akW94517;
+       Wed, 12 Jul 2000 01:36:46 -0400 (EDT)
+Received: from fw.wintelcom.net (bright@ns1.wintelcom.net [209.1.153.20])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C5ZCW88503
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 01:35:12 -0400 (EDT)
+Received: (from bright@localhost)
+       by fw.wintelcom.net (8.10.0/8.10.0) id e6C5Z1f00384;
+       Tue, 11 Jul 2000 22:35:01 -0700 (PDT)
+Date: Tue, 11 Jul 2000 22:35:00 -0700
+From: Alfred Perlstein <bright@wintelcom.net>
+To: Bruce Momjian <pgman@candle.pha.pa.us>
+Cc: Jeffery Collins <collins@onyx-technologies.com>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling.
+Message-ID: <20000711223500.Z25571@fw.wintelcom.net>
+References: <396BE1B6.F755C5CE@onyx-technologies.com> <200007120428.AAA06357@candle.pha.pa.us>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.2i
+In-Reply-To: <200007120428.AAA06357@candle.pha.pa.us>; from pgman@candle.pha.pa.us on Wed, Jul 12, 2000 at 12:28:46AM -0400
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+* Bruce Momjian <pgman@candle.pha.pa.us> [000711 21:31] wrote:
+> > It seems like a first step would be to just have postmaster cache unused
+> > connections.  In other words if a client closes a connection, postmaster
+> > keeps the connection and the child process around for the next connect
+> > request.  This has many of your advantages, but not all.  However, it seems
+> > like it would be simpler than attempting to multiplex a connection between
+> > multiple clients.
+> > 
+> 
+> This does seem like a good optimization.
+
+I'm not sure if the postmaster is needed besideds just to fork/exec
+the backend, if so then when a backend finishes it can just call
+accept() on the listening socket inherited from the postmaster to
+get the next incomming connection.
+
+-Alfred
+
+From pgsql-hackers-owner+M4907@hub.org Wed Jul 12 01:55:39 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id BAA06881
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 01:55:38 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C5tnW34576;
+       Wed, 12 Jul 2000 01:55:49 -0400 (EDT)
+Received: from sss2.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C5rfW28119
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 01:53:42 -0400 (EDT)
+Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
+       by sss2.sss.pgh.pa.us (8.9.3/8.9.3) with ESMTP id BAA21895;
+       Wed, 12 Jul 2000 01:52:56 -0400 (EDT)
+To: Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>
+cc: Alfred Perlstein <bright@wintelcom.net>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling. 
+In-reply-to: <396BEA84.1A06F51F@nimrod.itg.telecom.com.au> 
+References: <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au>
+Comments: In-reply-to Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>
+       message dated "Wed, 12 Jul 2000 13:48:20 +1000"
+Date: Wed, 12 Jul 2000 01:52:56 -0400
+Message-ID: <21892.963381176@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+Chris Bitmead <chrisb@nimrod.itg.telstra.com.au> writes:
+> Seems a lot trickier than you think. A backend can only be running
+> one transaction at a time, so you'd have to keep track of which backends
+> are in the middle of a transaction. I can imagine race conditions here.
+
+Aborting out of a transaction is no problem; we have code for that
+anyway.  More serious problems:
+
+* We have no code for reassigning a backend to a different database,
+  so the pooling would have to be per-database.
+
+* AFAIK there is no portable way to pass a socket connection from the
+  postmaster to an already-existing backend process.  If you do a
+  fork() then the connection is inherited ... otherwise you've got a
+  problem.  (You could work around this if the postmaster relays
+  every single byte in both directions between client and backend,
+  but the performance problems with that should be obvious.)
+
+> And backends can have contexts that are set by various clients using
+> SET and friends.
+
+Resetting SET variables would be a problem, and there's also the
+assigned user name to be reset.  This doesn't seem impossible, but
+it does seem tedious and error-prone.  (OTOH, Peter E's recent work
+on guc.c might have unified option-handling enough to bring it
+within reason.)
+
+The killer problem here is that you can't hand off a connection
+accepted by the postmaster to a backend except by fork() --- at least
+not with methods that work on a wide variety of Unixen.  Unless someone
+has a way around that, I think the idea is dead in the water; the lesser
+issues don't matter.
+
+                       regards, tom lane
+
+From pgsql-hackers-owner+M4910@hub.org Wed Jul 12 02:24:16 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id CAA11184
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 02:24:15 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C6OAW98187;
+       Wed, 12 Jul 2000 02:24:10 -0400 (EDT)
+Received: from acheron.rime.com.au (root@albatr.lnk.telstra.net [139.130.54.222])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C6MZW95741
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 02:22:36 -0400 (EDT)
+Received: from oberon (Oberon.rime.com.au [203.8.195.100])
+       by acheron.rime.com.au (8.9.3/8.9.3) with SMTP id QAA12845;
+       Wed, 12 Jul 2000 16:16:23 +1000
+Message-Id: <3.0.5.32.20000712162210.0098fb00@mail.rhyme.com.au>
+X-Sender: pjw@mail.rhyme.com.au
+X-Mailer: QUALCOMM Windows Eudora Pro Version 3.0.5 (32)
+Date: Wed, 12 Jul 2000 16:22:10 +1000
+To: Tom Lane <tgl@sss.pgh.pa.us>,
+        Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>
+From: Philip Warner <pjw@rhyme.com.au>
+Subject: Re: [HACKERS] Connection pooling. 
+Cc: Alfred Perlstein <bright@wintelcom.net>, pgsql-hackers@hub.org
+In-Reply-To: <21892.963381176@sss.pgh.pa.us>
+References: <396BEA84.1A06F51F@nimrod.itg.telecom.com.au>
+       <20000711185318.W25571@fw.wintelcom.net>
+       <396BEA84.1A06F51F@nimrod.itg.telecom.com.au>
+Mime-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+At 01:52 12/07/00 -0400, Tom Lane wrote:
+>
+>The killer problem here is that you can't hand off a connection
+>accepted by the postmaster to a backend except by fork() --- at least
+>not with methods that work on a wide variety of Unixen.  Unless someone
+>has a way around that, I think the idea is dead in the water; the lesser
+>issues don't matter.
+>
+
+My understanding of pg client interfaces is that the client uses ont of the
+pg interface libraries to make a connection to the db; they specify host &
+port and get back some kind of connection object.
+
+What stops the interface library from using the host & port to talk to the
+postmaster, find the host & port the spare db server, then connect directly
+to the server? This second connection is passed back in the connection object.
+
+When the client disconnects from the server, it tells the postmaster it's
+available again etc.
+
+ie. in very rough terms:
+
+    client calls interface to connect
+
+    interface talks to postmaster on port 5432, says "I want a server for
+xyz db"
+
+    postmaster replies with "Try port ABCD" OR "no servers available"
+    postmaster marks the nominated server as 'used'
+    postmaster disconnects from client
+
+    interface connects to port ABCD as per normal protocols
+    interface fills in connection object & returns
+
+    ...client does some work...
+
+    client disconnects
+
+    db server tells postmaster it's available again.
+
+
+There would also need to be timeout code to handle the case where the
+interface did not do the second connect.
+
+You could  also have the interface allocate a port send it's number to the
+postmaster then listen on it, but I think that would represent a potential
+security hole.
+
+
+----------------------------------------------------------------
+Philip Warner                    |     __---_____
+Albatross Consulting Pty. Ltd.   |----/       -  \
+(A.C.N. 008 659 498)             |          /(@)   ______---_
+Tel: (+61) 0500 83 82 81         |                 _________  \
+Fax: (+61) 0500 83 82 82         |                 ___________ |
+Http://www.rhyme.com.au          |                /           \|
+                                 |    --________--
+PGP key available upon request,  |  /
+and from pgp5.ai.mit.edu:11371   |/
+
+From pgsql-hackers-owner+M4912@hub.org Wed Jul 12 02:32:21 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id CAA11228
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 02:32:20 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C6WWW18412;
+       Wed, 12 Jul 2000 02:32:32 -0400 (EDT)
+Received: from fw.wintelcom.net (bright@ns1.wintelcom.net [209.1.153.20])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C6UwW16062
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 02:30:58 -0400 (EDT)
+Received: (from bright@localhost)
+       by fw.wintelcom.net (8.10.0/8.10.0) id e6C6Uov01852;
+       Tue, 11 Jul 2000 23:30:50 -0700 (PDT)
+Date: Tue, 11 Jul 2000 23:30:49 -0700
+From: Alfred Perlstein <bright@wintelcom.net>
+To: Tom Lane <tgl@sss.pgh.pa.us>
+Cc: Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling.
+Message-ID: <20000711233049.A25571@fw.wintelcom.net>
+References: <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au> <21892.963381176@sss.pgh.pa.us>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.2i
+In-Reply-To: <21892.963381176@sss.pgh.pa.us>; from tgl@sss.pgh.pa.us on Wed, Jul 12, 2000 at 01:52:56AM -0400
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+* Tom Lane <tgl@sss.pgh.pa.us> [000711 22:53] wrote:
+> Chris Bitmead <chrisb@nimrod.itg.telstra.com.au> writes:
+> > Seems a lot trickier than you think. A backend can only be running
+> > one transaction at a time, so you'd have to keep track of which backends
+> > are in the middle of a transaction. I can imagine race conditions here.
+> 
+> Aborting out of a transaction is no problem; we have code for that
+> anyway.  More serious problems:
+> 
+> * We have no code for reassigning a backend to a different database,
+>   so the pooling would have to be per-database.
+
+That would need to be fixed.  How difficult would that be?
+
+> * AFAIK there is no portable way to pass a socket connection from the
+>   postmaster to an already-existing backend process.  If you do a
+>   fork() then the connection is inherited ... otherwise you've got a
+>   problem.  (You could work around this if the postmaster relays
+>   every single byte in both directions between client and backend,
+>   but the performance problems with that should be obvious.)
+
+no, see below.
+
+> > And backends can have contexts that are set by various clients using
+> > SET and friends.
+> 
+> Resetting SET variables would be a problem, and there's also the
+> assigned user name to be reset.  This doesn't seem impossible, but
+> it does seem tedious and error-prone.  (OTOH, Peter E's recent work
+> on guc.c might have unified option-handling enough to bring it
+> within reason.)
+
+What can be done is that each incomming connection can be assigned an
+ID into a system table.  As options are added the system would assign
+them to key-value pairs in this table.  Once someone detects that the
+remote side has closed the connection the data can be destroyed, but
+until then along with the descriptor passing the ID of the client
+as an index into the table can be passed for the backend to fetch.
+
+> The killer problem here is that you can't hand off a connection
+> accepted by the postmaster to a backend except by fork() --- at least
+> not with methods that work on a wide variety of Unixen.  Unless someone
+> has a way around that, I think the idea is dead in the water; the lesser
+> issues don't matter.
+
+The code has been around since 4.2BSD, it takes a bit of #ifdef to
+get it right on all systems but it's not impossible, have a look at
+http://www.fhttpd.org/ for a web server that does this in a portable
+fashion.
+
+I should have a library whipped up for you guys really soon now
+to handle the descriptor and message passing.
+
+-- 
+-Alfred Perlstein - [bright@wintelcom.net|alfred@freebsd.org]
+"I have the heart of a child; I keep it in a jar on my desk."
+
+From pgsql-hackers-owner+M4913@hub.org Wed Jul 12 03:06:54 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id DAA11529
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 03:06:53 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C76ZW95615;
+       Wed, 12 Jul 2000 03:06:35 -0400 (EDT)
+Received: from sss2.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C74gW93358
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 03:04:42 -0400 (EDT)
+Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
+       by sss2.sss.pgh.pa.us (8.9.3/8.9.3) with ESMTP id DAA22136;
+       Wed, 12 Jul 2000 03:04:13 -0400 (EDT)
+To: Alfred Perlstein <bright@wintelcom.net>
+cc: Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling. 
+In-reply-to: <20000711233049.A25571@fw.wintelcom.net> 
+References: <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au> <21892.963381176@sss.pgh.pa.us> <20000711233049.A25571@fw.wintelcom.net>
+Comments: In-reply-to Alfred Perlstein <bright@wintelcom.net>
+       message dated "Tue, 11 Jul 2000 23:30:49 -0700"
+Date: Wed, 12 Jul 2000 03:04:13 -0400
+Message-ID: <22133.963385453@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+Alfred Perlstein <bright@wintelcom.net> writes:
+> * Tom Lane <tgl@sss.pgh.pa.us> [000711 22:53] wrote:
+>> The killer problem here is that you can't hand off a connection
+>> accepted by the postmaster to a backend except by fork() --- at least
+>> not with methods that work on a wide variety of Unixen.
+
+> The code has been around since 4.2BSD, it takes a bit of #ifdef to
+> get it right on all systems but it's not impossible, have a look at
+> http://www.fhttpd.org/ for a web server that does this in a portable
+> fashion.
+
+I looked at this to see if it would teach me something I didn't know.
+It doesn't.  It depends on sendmsg() which is a BSD-ism and not very
+portable.
+
+                       regards, tom lane
+
+From pgsql-hackers-owner+M4914@hub.org Wed Jul 12 03:12:40 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id DAA11597
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 03:12:39 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C7CjW13459;
+       Wed, 12 Jul 2000 03:12:45 -0400 (EDT)
+Received: from fw.wintelcom.net (bright@ns1.wintelcom.net [209.1.153.20])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C7B8W07036
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 03:11:08 -0400 (EDT)
+Received: (from bright@localhost)
+       by fw.wintelcom.net (8.10.0/8.10.0) id e6C79lE02841;
+       Wed, 12 Jul 2000 00:09:47 -0700 (PDT)
+Date: Wed, 12 Jul 2000 00:09:47 -0700
+From: Alfred Perlstein <bright@wintelcom.net>
+To: Tom Lane <tgl@sss.pgh.pa.us>
+Cc: Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling.
+Message-ID: <20000712000947.D25571@fw.wintelcom.net>
+References: <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au> <21892.963381176@sss.pgh.pa.us> <20000711233049.A25571@fw.wintelcom.net> <22133.963385453@sss.pgh.pa.us>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+User-Agent: Mutt/1.2i
+In-Reply-To: <22133.963385453@sss.pgh.pa.us>; from tgl@sss.pgh.pa.us on Wed, Jul 12, 2000 at 03:04:13AM -0400
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+* Tom Lane <tgl@sss.pgh.pa.us> [000712 00:04] wrote:
+> Alfred Perlstein <bright@wintelcom.net> writes:
+> > * Tom Lane <tgl@sss.pgh.pa.us> [000711 22:53] wrote:
+> >> The killer problem here is that you can't hand off a connection
+> >> accepted by the postmaster to a backend except by fork() --- at least
+> >> not with methods that work on a wide variety of Unixen.
+> 
+> > The code has been around since 4.2BSD, it takes a bit of #ifdef to
+> > get it right on all systems but it's not impossible, have a look at
+> > http://www.fhttpd.org/ for a web server that does this in a portable
+> > fashion.
+> 
+> I looked at this to see if it would teach me something I didn't know.
+> It doesn't.  It depends on sendmsg() which is a BSD-ism and not very
+> portable.
+
+It's also specified by Posix.1g if that means anything.
+
+-Alfred
+
+From pgsql-hackers-owner+M4916@hub.org Wed Jul 12 03:49:58 2000
+Received: from hub.org (root@hub.org [216.126.84.1])
+       by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id DAA11736
+       for <pgman@candle.pha.pa.us>; Wed, 12 Jul 2000 03:49:58 -0400 (EDT)
+Received: from hub.org (majordom@localhost [127.0.0.1])
+       by hub.org (8.10.1/8.10.1) with SMTP id e6C7oBW95547;
+       Wed, 12 Jul 2000 03:50:11 -0400 (EDT)
+Received: from sss2.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2])
+       by hub.org (8.10.1/8.10.1) with ESMTP id e6C7mPW93141
+       for <pgsql-hackers@hub.org>; Wed, 12 Jul 2000 03:48:25 -0400 (EDT)
+Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
+       by sss2.sss.pgh.pa.us (8.9.3/8.9.3) with ESMTP id DAA22297;
+       Wed, 12 Jul 2000 03:47:37 -0400 (EDT)
+To: Philip Warner <pjw@rhyme.com.au>
+cc: Chris Bitmead <chrisb@nimrod.itg.telstra.com.au>,
+        Alfred Perlstein <bright@wintelcom.net>, pgsql-hackers@hub.org
+Subject: Re: [HACKERS] Connection pooling. 
+In-reply-to: <3.0.5.32.20000712162210.0098fb00@mail.rhyme.com.au> 
+References: <396BEA84.1A06F51F@nimrod.itg.telecom.com.au> <20000711185318.W25571@fw.wintelcom.net> <396BEA84.1A06F51F@nimrod.itg.telecom.com.au> <3.0.5.32.20000712162210.0098fb00@mail.rhyme.com.au>
+Comments: In-reply-to Philip Warner <pjw@rhyme.com.au>
+       message dated "Wed, 12 Jul 2000 16:22:10 +1000"
+Date: Wed, 12 Jul 2000 03:47:37 -0400
+Message-ID: <22294.963388057@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+X-Mailing-List: pgsql-hackers@postgresql.org
+Precedence: bulk
+Sender: pgsql-hackers-owner@hub.org
+Status: OR
+
+Philip Warner <pjw@rhyme.com.au> writes:
+> What stops the interface library from using the host & port to talk to
+> the postmaster, find the host & port the spare db server, then connect
+> directly to the server?
+
+You're assuming that we can change the on-the-wire protocol freely and
+only the API presented by the client libraries matters.  In a perfect
+world that might be true, but reality is that we can't change the wire
+protocol easily.  If we do, it breaks all existing precompiled clients.
+Updating clients can be an extremely painful experience in multiple-
+machine installations.
+       
+Also, we don't have just one set of client libraries to fix.  There are
+at least three client-side implementations that don't depend on libpq.
+
+We have done protocol updates in the past --- in fact I was responsible
+for the last one.  (And I'm still carrying the scars, which is why I'm
+not too enthusiastic about another one.)  It's not impossible, but it
+needs more evidence than "this should speed up connections by
+I-don't-know-how-much"...
+
+It might also be worth pointing out that the goal was to speed up the
+end-to-end connection time.  Redirecting as you suggest is not free
+(at minimum it would appear to require two TCP connection setups and two
+authentication cycles).  What evidence have you got that it'd be faster
+than spawning a new backend?
+
+I tend to agree with the opinion that connection-pooling on the client
+side offers more bang for the buck than we could hope to get by doing
+surgery on the postmaster/backend setup.
+
+Also, to return to the original point, AFAIK we have not tried hard
+to cut the backend startup time, other than the work that was done
+a year or so back to eliminate exec() of a separate executable.
+It'd be worth looking to see what could be done there with zero
+impact on existing clients.
+
+                       regards, tom lane
+