пятница, 20 апреля 2018 г.

Отсутствие многопоточности в рамках одного запроса у PostgreSQL

Отсюда. Записал, так как лаконично и по делу.

В сети можно встретить примеры, (особенно в последнее время) когда  PostgreSQL  работает на сотнях пользователей в 1С, но я такого в живую не видел (чтоб без косяков, при большом количестве запросов) чтоб СУБД работала также быстро и хорошо, как и на MS SQL standard, например.
Вот одна из причин: PostgreSQL не умеет работать многопоточно (не путать с параллельно)!
Иногда в интернете, можно наткнуться на статью что PostgreSQL грузит только одно ядро на 100%, и мол не работает с многоядерными архитектурами. 
Знайте, что это не так! (Вернее не совсем так!)

PostgreSQL грузит все ядра, только если есть соответствующее количество запросов .
Один большой запрос действительно может  на 100% загрузить одно ядро вашего сервера так как
1 запрос = 1 поток! (На этой СУБД).
 Но если запросов будет много, соответственно и все ядра будут задействованы также.
PostgreSQL способен задействовать все ядра вашего сервера!
Каждое ядро может дать нам несколько потоков, например как минимум два, и уже, чтоб задействовать 2 ядра (4 потока) будет достаточно отправить на СУБД 3 – 4 запроса.
Помните?
1 запрос = 1 поток.
Другими словами, не распараллеливается выполнение одного запроса.
Нет многопоточности в рамках одного запроса  – это одна из причин, почему PostgreSQL работает медленнее MS SQL.
Один большой запрос может стать «узким местом» в производительности вашей 1С на этой СУБД.

Комментариев нет:

Отправить комментарий