2008-11-02 86 views
41

我想知道,與postgresql的UNIX域套接字連接速度更快,然後從本地主機的TCP連接以高併發速度,如果它,多少?PostgreSQL UNIX域套接字與TCP套接字

+0

編寫的上下文是'postgresql':在這種情況下,關於連接到本地數據庫的兩種方式,這是一個非常具體的問題。 – reedstrm 2009-02-23 19:52:04

回答

-3

本地主機上的TCP套接字通常使用UNIX域套接字實現,所以大多數系統上的答案都可以忽略。然而,這並不是標準 - 它只是通常的做法,所以你不應該依賴這個。

+3

出於好奇,在哪些操作系統是使用UNIX域套接字實現的TCP環回? – Alexander 2008-11-02 22:16:06

+1

無AFAIK - 但如果爲數據庫連接字符串指定了「localhost」,則會自動嘗試使用UNIX域套接字。 – Alnitak 2008-11-02 22:20:32

4

據我所知,Unix域套接字(UDS)的工作就像系統管道,並只發送數據,而不是發送校驗等附加信息,不使用三次握手的TCP套接字...

PS:也許UDS將更快

5

我相信UNIX域套接字在理論上比環回接口上的TCP套接字提供更好的吞吐量,但實際上差異可能可以忽略不計。

通過UNIX域套接字傳輸的數據不必上下穿過IP堆棧層。

回覆:亞歷山大的回答。 AFAIK你不應該在每個方向(即每個read()write())獲得任何超過一個上下文切換或數據拷貝,因此我相信這種差異將會被忽略。 IP棧在層之間移動時不需要複製數據包,但它必須操作內部數據結構來添加和刪除更高層的數據包頭。

45

Postgres核心開發者Bruce Momjian擁有blogged about this topic。 Momjian表示:「Unix域套接字通信速度顯着提高。」他測量了查詢網絡性能,表明本地域套接字比使用TCP/IP堆棧快33%。