Thread: Unix domain instead of TCP socket connections with JDBC.
Unix domain instead of TCP socket connections with JDBC.
From
froggle2003@yahoo.com (Alex Martinoff)
Date:
Using the org.postgresql.Driver JDBC driver is it possible to connect to Postgres using a unix domain socket instead of a TCP socket (so you don't have to start the postmaster with -i)? Using a TCP socket instead of a unix socket seems to slow down requests that return large result sets by a factor of 3 on the same machine. What's the point of all the extra CPU overhead if you're on the same machine? A high-volume server can really do without the extra overhead. Also, for security reasons it would be slightly nicer to run Postgres without -i just so there's one less port popping up when you port-scan.
froggle2003@yahoo.com (Alex Martinoff) writes: > ... Using a TCP socket > instead of a unix socket seems to slow down requests that return large > result sets by a factor of 3 on the same machine. Seems like a kernel bug to me. All modern TCP stacks have shortcuts for local connections. What platform are you on exactly? (BTW, this is not an argument against having JDBC support unix-socket connections; I can see security reasons for that. But there should not be performance reasons for it.) regards, tom lane
On 7 Sep 2003, Alex Martinoff wrote: > Using the org.postgresql.Driver JDBC driver is it possible to connect > to Postgres using a unix domain socket instead of a TCP socket (so you > don't have to start the postmaster with -i)? Using a TCP socket > instead of a unix socket seems to slow down requests that return large > result sets by a factor of 3 on the same machine. What's the point of > all the extra CPU overhead if you're on the same machine? A > high-volume server can really do without the extra overhead. Also, for > security reasons it would be slightly nicer to run Postgres without -i > just so there's one less port popping up when you port-scan. Java does not provide an API for dealing with unix sockets. It might be possible to create such an interface via JNI, but I doubt you'll get a whole lot of interest from the JDBC driver developers as the postgresql JDBC driver is a Type IV (pure java) driver. Is this factor of 3 difference in time the difference from running psql over unix sockets vs tcp, or is it the difference between a Java client and psql? If it's the latter you're not really doing an apples to apples comparison. Kris Jurka
The tomcat developers were working on a hybrid system, that would use unix sockets via JNI for local connections, but I'm not sure what happened to it. Or maybe they used a named pipe instead? I really don't know.