Параллельные запросы в PostgreSQL - что на самом деле происходит? - PullRequest
0 голосов
/ 13 февраля 2020

Допустим, у нас есть два пользователя, выполняющих запрос к одной и той же таблице в PostgreSQL. Итак,

Пользователь 1: SELECT * FROM table WHERE year = '2020' и

Пользователь 2: SELECT * FROM table WHERE year = '2019'

Будут ли они выполняться одновременно с выполнением одного после Другой?

Я ожидаю, что если у меня есть 2 процессора, я могу запустить оба одновременно. Но я думаю, что все становится намного сложнее в зависимости от того, где находятся данные (например, на диске), учитывая, что это одна и та же таблица, есть ли разделы, конфигурации, транзакции и т. Д. c. Может ли кто-нибудь помочь мне понять, как я могу добиться желаемого поведения в отношении PostgreSQL? При каких обстоятельствах я получу желаемое поведение, а при каких - нет?

РЕДАКТИРОВАТЬ: Я нашел этот другой вопрос, который очень близок к тому, что я задавал - https://dba.stackexchange.com/questions/72325/postgresql-if-i-run-multiple-queries-concurrently-under-what-circumstances-wo , Он немного староват и не имеет много ответов, был бы признателен за оценку sh.

1 Ответ

1 голос
/ 13 февраля 2020

Если у двух пользователей есть два независимых соединения, и они не могут go изо всех сил блокировать друг друга, тогда запросы будут выполняться одновременно. Если им необходимо получить доступ к одному и тому же буферу в одно и то же время или одновременно прочитать одну и ту же страницу диска в буфере, они будут использовать очень быстрые методы блокировки / координации (LWLocks, спин-блокировки или операции Atomi c, такие как CAS ) чтобы согласовать это. Точные методы варьируются от версии к версии, поскольку лучшие методы становятся широко доступными на поддерживаемых платформах и когда люди находят время, чтобы изменить реализацию, чтобы использовать эти лучшие методы.

Я могу гарантировать, что получу свои желаемое поведение в отношении PostgreSQL?

Вы всегда должны получить правильный ответ на ваш запрос (или, возможно, какая-то ОШИБКА, указывающая на ошибку сериализации, если вы используете самый высокий (и не по умолчанию) уровень изоляции, но это, по-видимому, не является риском, если каждый из этих запросов выполняется в транзакции с одним оператором.)

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

Кроме того, «параллельный запрос» относится к одному запросу с использованием нескольких ЦП, а не к разным Запросы выполняются одновременно.

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