60

I wonder if the UNIX domain socket connections with postgresql are faster then tcp connections from localhost in high concurrency rate and if it does, by how much?

1
  • The context as written is 'postgresql': In that case, it's a very specific Q. about the two ways to connect to a local DB.
    – reedstrm
    CommentedFeb 23, 2009 at 19:52

5 Answers 5

67

Postgres core developer Bruce Momjian has blogged about this topic. Momjian states, "Unix-domain socket communication is measurably faster." He measured query network performance showing that the local domain socket was 33% faster than using the TCP/IP stack.

3
  • 2
    The overhead is +175% when SSL for TCP is enabled.
    – Greg Dan
    CommentedSep 25, 2016 at 10:01
  • @GregDan perhaps you can point me to a source for this claim? tia!
    – FuzzyAmi
    CommentedJul 8, 2019 at 21:07
  • 2
    @FuzzyAmi This from the linked article.
    – Greg Dan
    CommentedJul 9, 2019 at 14:55
45

UNIX domain sockets should offer better performance than TCP sockets over loopback interface (less copying of data, fewer context switches), but I don't know whether the performance increase can be demonstrated with PostgreSQL.

I found a small comparison on the FreeBSD mailinglist: http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html.

    7

    afaik, unix domain socket (UDS) work like system pipes and it send ONLY data, not send checksum and other additional info, not use three-way handshake as TCP sockets...

    ps: maybe UDS will be more faster

      7

      I believe that UNIX domain sockets in theory give better throughput than TCP sockets on the loopback interface, but in practice the difference is probably negligible.

      Data carried over UNIX domain sockets don't have to go up and down through the IP stack layers.

      re: Alexander's answer. AFAIK you shouldn't get any more than one context switch or data copy in each direction (i.e. for each read() or write()), hence why I believe the difference will be negligble. The IP stack doesn't need to copy the packet as it moves between layers, but it does have to manipulate internal data structures to add and remove higher-layer packet headers.

      0
        -6

        TCP sockets on localhost are usually implemented using UNIX domain sockets, so the answer on most systems is neglijable to none. However, this is not standard in any way -- it is just how usually it is done, therefore you should not depend on this.

        3
        • 5
          Just out of curiosity, on which OSes is TCP loopback implemented using UNIX domain sockets?
          – Alexander
          CommentedNov 2, 2008 at 22:16
        • 1
          none AFAIK - but several databases automatically attempt to use the UNIX domain socket if you specify "localhost" for the DB connection string.
          – Alnitak
          CommentedNov 2, 2008 at 22:20
        • 5
          PostgreSQL is one which doesn't - if you specify localhost, it will use TCP loopback, if you specify nothing, it will use the domain socket.
          – CesarB
          CommentedNov 2, 2008 at 23:00

        Start asking to get answers

        Find the answer to your question by asking.

        Ask question

        Explore related questions

        See similar questions with these tags.