Возможны ли параллельные операторы SELECT в PostgreSQL? - PullRequest
3 голосов
/ 23 июня 2011

Вопрос от новичка по SQL и базе данных :

Я прочитал несколько статей о параллелизме БД, но чаще всего описывается одновременное обновление.

Однако меня интересует только получение информации из базы данных.

Итак, вот вопросы:

Можно ли одновременно сделать много SELECT из базы данных? Будут ли эти SELECTs мешать? Возможен ли случай 2?

Обычный случай (1):

  • [Истекшее время: 0 секунд]
  • ВЫБРАТЬ что-нибудь1 ИЗ таблицы1
  • Получить результат для первого SELECT
  • [Истекшее время: 1,5 секунды]
  • ВЫБРАТЬ что-нибудь2 ИЗ таблицы1
  • Получить результат для второго SELECT
  • [Истекшее время: 3 секунды]

Случай с одновременными запросами (2):

  • [Истекшее время: 0 секунд]
  • ВЫБРАТЬ что-нибудь1 ИЗ таблицы1
  • [Истекшее время: 0,001 секунды]
  • ВЫБРАТЬ что-нибудь2 ИЗ таблицы1
  • Получить результат для первого SELECT
  • [Истекшее время: 1,5 секунды]
  • Получить результат для второго SELECT
  • [Истекшее время: 1,5001 секунды]

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

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

0 голосов
/ 29 марта 2016

Теперь с PostgreSQL 9.6 + части SQL-запроса могут быть распараллелены практически без усилий пользователя (без DBLink / без специальной настройки запроса).

Подробнее здесь .

0 голосов
/ 25 июня 2011

PostgreSQL координирует несколько операторов, выполняющихся одновременно, используя подход с именем MVCC .В наиболее распространенных случаях несколько читателей или писателей сосуществуют без какого-либо вмешательства друг в друга.Вполне возможно, что две сессии, выполняющие различные операции чтения и записи, могут мешать друг другу.Например, второй сеанс, пытающийся ОБНОВИТЬ строку, уже ОБНОВЛЕННУЮ все еще выполняющейся транзакцией, заблокирует ожидание первого сеанса, чтобы либо зафиксировать, либо прервать.

В некоторых других ситуациях два сеанса, выполняющие что-то подобное, будут взаимодействовать, но это сделано для повышения производительности.Например, если один сеанс выполняет гигантский запрос последовательного сканирования всей таблицы, а затем второй сеанс начинает делать то же самое, второй присоединится, чтобы разделить работу, выполняемую первым.Это все прозрачно для вас, но может значительно ускорить, как быстро завершается каждый запрос.

Главное, о чем следует беспокоиться при одновременном запуске нескольких соединений, - это когда вы начинаете выполнять операторы UPDATE и DELETE, которые принимают блокировкина предметы в базе данных.Они могут легко мешать друг другу, и в результате второе утверждение часто заканчивается ожиданием завершения первого, прежде чем оно продолжится.Это также описано в главе документации, о которой я уже упоминал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...