PostgreSQL UNIX域套接字与TCP套接字

我不知道如果UNIX域套接字与PostgreSQL的连接速度更快,然后从本地主机的TCP连接高并发率,如果它,多less?

UNIX域套接字应该比通过回送接口的TCP套接字提供更好的性能(更less的数据拷贝,更less的上下文切换),但是我不知道PostgreSQL是否能够提高性能。

我在FreeBSD邮件列表上find了一个小小的比较: http : //lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html 。

Postgres的核心开发者Bruce Momjian已经在这个主题上发表了博客 。 Momjian表示:“Unix域套接字通信速度显着提高。” 他衡量查询networking性能,显示本地域套接字比使用TCP / IP堆栈快33%。

我相信在理论上 ,UNIX域套接字比环回接口上的TCP套接字具有更好的吞吐量,但实际上差别可能可以忽略不计。

通过UNIX域套接字传送的数据不必通过IP堆栈层上下移动。

回复:亚历山大的回答。 AFAIK你不应该得到任何超过一个上下文切换或每个方向的数据副本(即每个read()write() ),因此我相信为什么我认为这种差异是可以忽略的。 IP栈在层之间移动时不需要复制数据包,但是它必须操作内部数据结构来添加和删除更高层的数据包头。

afaik,unix域套接字(UDS)像系统pipe道工作,它只发送数据,不发送校验和和其他信息,不使用TCP套接字三方握手…

ps:也许UDS会更快

本地主机上的TCP套接字通常使用UNIX域套接字来实现,所以在大多数系统上的答案是可以忽略的。 然而,这并不是什么标准 – 这是通常的做法,所以你不应该依赖这个。