PostgreSQL UNIX域套接字与TCP套接字

时间:2008-11-02 21:50:30

标签: performance postgresql tcp sockets

我想知道与postgresql的UNIX域套接字连接是否比高并发率的localhost的tcp连接更快,如果有的话,是多少呢?

5 个答案:

答案 0 :(得分:49)

Postgres核心开发人员Bruce Momjian已blogged about this topic。 Momjian表示,“Unix域套接字通信的速度要快得多。”他测量了查询网络性能,显示本地域套接字比使用TCP / IP堆栈快33%。

答案 1 :(得分:32)

UNIX域套接字应该比TCP回送接口提供更好的性能(减少数据复制,减少上下文切换),但我不知道PostgreSQL是否可以证明性能提升。

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

答案 2 :(得分:5)

我认为UNIX域套接字理论上比环回接口上的TCP套接字提供更好的吞吐量,但实际上差异可能微不足道。

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

re:亚历山大的回答。 AFAIK你不应该在每个方向上获得任何一个上下文切换或数据拷贝(即每个read()write()),因此我认为差异可以忽略不计。 IP堆栈在层之间移动时不需要复制数据包,但它必须操纵内部数据结构以添加和删除更高层的数据包标头。

答案 3 :(得分:4)

afaik,unix域套接字(UDS)就像系统管道一样工作,只发送数据,不发送校验和和其他附加信息,不使用三次握手作为TCP套接字......

ps:也许UDS会更快

答案 4 :(得分:-3)

localhost上的TCP套接字通常使用UNIX域套接字实现,因此大多数系统的答案都不可忽略。但是,这在任何方面都不是标准的 - 它只是通常的方式,因此你不应该依赖它。