2008-11-02 3 views
41

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

+0

Контекст как написано «postgresql»: в этом случае это очень специфический вопрос о двух способах подключения к локальной базе данных. – reedstrm 2009-02-23 19:52:04

ответ

29

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

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

-3

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

+3

Просто из любопытства, на котором операционные системы - это петля TCP, реализованная с использованием сокетов домена UNIX? – Alexander 2008-11-02 22:16:06

+1

AFAIK - но несколько баз данных автоматически пытаются использовать сокет домена UNIX, если вы укажете «localhost» для строки подключения к DB. – Alnitak 2008-11-02 22:20:32

4

AFAIK, UNIX домен сокет (UDS) работает как система трубы и отправлял только данные, а не отправлять контрольную сумму и другую дополнительную информацию, а не использовать три рукопожатие как TCP сокеты ...

пса: может быть UDS будет более быстрым.

5

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

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

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

45

Разработчик ядра Postgres Bruce Momjian имеет blogged about this topic. Momjian заявляет: «Обмен сокетами Unix-домена значительно быстрее». Он измерил производительность сети запросов, указав, что локальный доменный сокет был на 33% быстрее, чем использование стека TCP/IP.