Доклад

Транзакции в PostgreSQL: распараллелить нераспараллеливаемое

Пользователи PostgreSQL стремятся ускорить выполнение массовых операций INSERT, UPDATE и DELETE. Самым очевидным путем для ускорения выглядит распараллеливание этих операций.

Однако в PostgreSQL существуют фундаментальные ограничения, мешающие реализовать этот подход:

  1. Распараллеливание DML‑операций в рамках одного запроса не поддерживается.
  2. При разбиении задачи на несколько запросов СУБД не может гарантировать атомарность фиксации всех изменений.

Для обхода второго ограничения разработчики нередко реализуют логику нарезки большой задачи на части на уровне приложения: работу распределяют между независимыми транзакциями, а их фиксацию делают атомарной с точки зрения самого приложения. Но такой подход не обеспечивает атомарности на уровне СУБД — это усложняет логику работы приложения и может привести к появлению трудноуловимых проблем.

Я расскажу про наше решение, которое реализует поддержку атомарного коммита группы транзакций прямо в ядре PostgreSQL. В основе решения — механизм двухфазной фиксации (2PC). Благодаря этому подход применим также и для распределенных транзакций.

Поговорим про историю создания фичи, принцип ее работы, области применения и выигрыш от ее использования.

Спикеры

Доклады