Контроль конкурентности в PostgreSQL

PostgreSQL предоставляет разработчикам богатый набор инструментов для управления одновременным доступом к данным. Внутренне согласованность данных поддерживается за счет использования многоверсионной модели (Multiversion Concurrency Control, MVCC). Это означает, что каждый оператор SQL видит моментальный снимок данных (версию базы данных), каким он был некоторое время назад, независимо от текущего состояния базовых данных. Это предотвращает просмотр операторами несогласованных данных, созданных параллельными транзакциями, выполняющими обновления одних и тех же строк данных, обеспечивая изоляцию транзакций для каждого сеанса базы данных. MVCC, избегая методологий блокировки традиционных систем баз данных, сводит к минимуму конфликт блокировок, чтобы обеспечить приемлемую производительность в многопользовательских средах.

Основное преимущество использования модели управления параллелизмом MVCC, а не блокировки, заключается в том, что в MVCC блокировки, полученные для запроса (чтения) данных, не конфликтуют с блокировками, полученными для записи данных, и поэтому чтение никогда не блокирует запись, а запись никогда не блокирует чтение. PostgreSQL сохраняет эту гарантию даже при обеспечении строжайшего уровня изоляции транзакций за счет использования инновационного уровня Serializable Snapshot Isolation (SSI).

Средства блокировки на уровне таблиц и строк также доступны в PostgreSQL для приложений, которые обычно не нуждаются в полной изоляции транзакций и предпочитают явно управлять отдельными точками конфликта. Однако правильное использование MVCC обычно обеспечивает лучшую производительность, чем блокировки. Кроме того, определяемые приложением рекомендательные блокировки предоставляют механизм для получения блокировок, которые не привязаны к отдельной транзакции.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных