postgresqlを使用したUNIXドメインソケット接続は、高い同時実行率でローカルホストからのtcp接続よりも高速かどうか疑問に思います。高速である場合、どのくらいですか?
5 に答える
Postgres コア開発者の Bruce Momjian は、このトピックについてブログを書いています。Momjian 氏は、「Unix ドメインのソケット通信はかなり高速です」と述べています。彼は、ローカル ドメイン ソケットが TCP/IP スタックを使用するよりも 33% 高速であることを示すクエリ ネットワーク パフォーマンスを測定しました。
UNIX ドメイン ソケットは、ループバック インターフェイスを介した TCP ソケットよりも優れたパフォーマンスを提供するはずですが (データのコピーが少なく、コンテキスト スイッチが少ない)、パフォーマンスの向上が PostgreSQL で実証できるかどうかはわかりません。
FreeBSD メーリングリストで小さな比較を見つけました: http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html。
ループバック インターフェイスでは、理論的には UNIX ドメイン ソケットの方が TCP ソケットよりも優れたスループットを示すと思いますが、実際にはその差はおそらく無視できる程度です。
UNIX ドメイン ソケットを介して伝送されるデータは、IP スタック層を上下に移動する必要はありません。
re: アレクサンダーの答え。read()
私の知る限り、各方向(つまり、またはそれぞれ)で複数のコンテキストスイッチまたはデータコピーを取得するべきではないためwrite()
、違いはごくわずかであると私は信じています。IP スタックは、レイヤー間を移動するときにパケットをコピーする必要はありませんが、内部データ構造を操作して上位レイヤーのパケット ヘッダーを追加および削除する必要があります。
私の知る限り、UNIXドメインソケット(UDS)はシステムパイプのように機能し、データのみを送信し、チェックサムやその他の追加情報を送信せず、TCPソケットとしてスリーウェイハンドシェイクを使用しません...
ps: UDS の方が速いかもしれません
ローカルホストのTCPソケットは通常、UNIXドメインソケットを使用して実装されるため、ほとんどのシステムでの答えは無視できます。ただし、これは決して標準ではありません。これは通常の方法であるため、これに依存しないでください。