блокировка таблицы базы данных postgresql или блокировка строк - PullRequest
0 голосов
/ 21 сентября 2018

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

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

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

1 Ответ

0 голосов
/ 21 сентября 2018

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

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

Postgres Wiki содержит ссылки на более подробные описания того, как именно MVCC реализован и работает в Postgres.

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

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