Блокировка таблицы базы данных postgresql или блокировка строк, выполнение нескольких запросов

Я хотел бы понять, как postgreSQL выполняет выполнение нескольких запросов, например, у меня есть БД, в которой выполняется множество запросов на вставку, например, 20-40 в минуту, и множество запросов на выборку, таких как 200-300 в минуту (простой запрос по первичному ключу отбор).

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

В базе данных mysql есть механизм MyISAM, который блокирует таблицу, и innoDB, который блокирует строки, я думаю...


person Emrah Mehmedov    schedule 21.09.2018    source источник


Ответы (1)


Postgres реализует контроль параллелизма версий (MVCC), что означает, что читатели никогда не блокируют писателей, а писатели никогда не блокируют читателей.

Для обычных операторов DML Postgres никогда не блокирует таблицу, поэтому запросы SELECT никогда не блокируются ни одним из операторов INSERT, которые вы выполняете одновременно.

Вики Postgres содержит ссылки на более подробные описания реализации и работы MVCC в Postgres.

По сути, каждая современная СУБД использует какой-либо вид MVCC в наши дни. Oracle, Firebird и DB2 «всегда» использовали его. SQL Server представил его в SQL Server 2005 (хотя это все еще не поведение по умолчанию), а в MySQL его использует механизм InnoDB.

person a_horse_with_no_name    schedule 21.09.2018