Сокеты домена PostgreSQL UNIX и сокеты TCP

Интересно, быстрее ли соединения сокетов домена UNIX с postgresql, чем TCP-соединения с localhost с высокой скоростью параллелизма, и если да, то насколько?


person user20955    schedule 02.11.2008    source источник
comment
Контекст, как написано, - «postgresql»: в этом случае это очень конкретный вопрос о двух способах подключения к локальной БД.   -  person reedstrm    schedule 23.02.2009


Ответы (5)


Сокеты домена UNIX должны обеспечивать лучшую производительность, чем сокеты TCP через интерфейс обратной петли (меньше копирования данных, меньше переключателей контекста), но я не знаю, можно ли продемонстрировать увеличение производительности с помощью PostgreSQL.

Я нашел небольшое сравнение в списке рассылки FreeBSD: http://lists.freebsd.org/pipermail/freebsd-performance/2005-FebFebruary/001143.html.

person Alexander    schedule 02.11.2008

Разработчик ядра Postgres Брюс Момджиан писал по этой теме в блоге. Момджян заявляет: «Соединение сокетов домена Unix значительно быстрее». Он измерил производительность сети запросов, показав, что сокет локального домена был на 33% быстрее, чем при использовании стека TCP / IP.

person NoelProf    schedule 24.08.2012
comment
Накладные расходы составляют + 175%, когда включен SSL для TCP. - person Greg Dan; 25.09.2016
comment
@GregDan, возможно, вы можете указать мне источник этого утверждения? тиа! - person FuzzyAmi; 09.07.2019
comment
@FuzzyAmi Это из связанной статьи. - person Greg Dan; 09.07.2019

Я считаю, что сокеты домена UNIX теоретически обеспечивают лучшую пропускную способность, чем сокеты TCP на интерфейсе обратной связи, но на практике разница, вероятно, незначительна.

Данные, передаваемые через сокеты домена UNIX, не должны проходить вверх и вниз через уровни стека IP.

re: Ответ Александра. AFAIK вы не должны получать более одного переключателя контекста или копии данных в каждом направлении (т.е. для каждого read() или write()), поэтому я считаю, что разница будет незначительной. Стеку IP не нужно копировать пакет при его перемещении между уровнями, но он должен манипулировать внутренними структурами данных для добавления и удаления заголовков пакетов более высокого уровня.

person Alnitak    schedule 02.11.2008

afaik, сокет домена unix (UDS) работает как системные каналы и отправляет ТОЛЬКО данные, не отправляет контрольную сумму и другую дополнительную информацию, не использует трехстороннее рукопожатие в качестве сокетов TCP ...

ps: может UDS будет шустрее

person slav0nic    schedule 02.11.2008

TCP-сокеты на localhost обычно реализуются с использованием доменных сокетов UNIX, поэтому в большинстве систем ответ ничтожно мал. Однако это ни в коем случае не стандартно - это просто так, как обычно, поэтому вы не должны зависеть от этого.

person Terminus    schedule 02.11.2008
comment
Просто из любопытства, в каких ОС реализована петля TCP с использованием доменных сокетов UNIX? - person Alexander; 03.11.2008
comment
нет AFAIK - но несколько баз данных автоматически пытаются использовать сокет домена UNIX, если вы указываете localhost для строки подключения к БД. - person Alnitak; 03.11.2008
comment
PostgreSQL - это тот, который этого не делает - если вы укажете localhost, он будет использовать loopback TCP, если вы ничего не укажете, он будет использовать сокет домена. - person CesarB; 03.11.2008