PostgreSQL UNIX域套接字 vs TCP套接字

56

我想知道在高并发率下,与postgresql的UNIX域套接字连接是否比本地tcp连接更快?如果是,快多少?


上下文是“postgresql”,因此这是一个关于连接本地数据库的两种方式的非常具体的问题。 - reedstrm
5个回答

62

Postgres核心开发者Bruce Momjian已经在他的博客中谈到了这个主题。Momjian表示:“Unix域套接字通信速度更快。”他测量了查询网络性能,显示本地域套接字比使用TCP/IP协议栈要快33%。


1
启用SSL/TCP时,开销增加了175%。 - Greg Dan
@GregDan 或许你可以指引我找到这个声明的来源吗?谢谢! - FuzzyAmi
2
@FuzzyAmi 这是来自链接文章的内容。 - Greg Dan

44

8
我认为UNIX域套接字在理论上比环回接口上的TCP套接字具有更好的吞吐量,但实际上差异可能可以忽略不计。
通过UNIX域套接字传输的数据不必经过IP协议栈层层传递。
关于Alexander的回答。据我所知,每个方向(即每个read()或write())不应该超过一个上下文切换或数据复制,因此我认为差异将是微不足道的。IP协议栈在移动数据包时不需要复制数据包,但需要操作内部数据结构以添加和删除高层数据包头。

7

据我所知,Unix域套接字(UDS)的工作方式类似于系统管道,它仅发送数据,不发送校验和和其他附加信息,也不使用TCP套接字的三次握手...

PS:也许UDS会更快。


-5

本地主机上的TCP套接字通常使用UNIX域套接字实现,因此在大多数系统上的答案可以忽略不计。但是,这并不是标准做法,这只是通常的做法,因此您不应该依赖于此。


5
仅出于好奇,TCP回环在哪些操作系统上使用UNIX域套接字实现? - Alexander
1
目前为止没有 - 但是如果您在数据库连接字符串中指定“localhost”,则有几个数据库会自动尝试使用UNIX域套接字。 - Alnitak
5
PostgreSQL是这样的一个数据库,如果你指定了localhost,它会使用TCP回环,如果你没有指定任何东西,它会使用域套接字。 - CesarB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接