Параллельное выполнение транзакций в PostgreSQL работает на основе многоверсионной модели (MVCC). 24 Она создаёт снимок базы для каждой транзакции, позволяя параллельным операциям видеть согласованное состояние данных. 4
Когда параллельные транзакции изменяют одни и те же строки таблиц, создаются отдельные версии этих строк, доступные соответствующим транзакциям. 2 Это позволяет ускорить работу с базой данных, однако требует больше дискового пространства и оперативной памяти. 2
Некоторые феномены, которые могут возникать при параллельном выполнении транзакций в PostgreSQL:
- Потерянное обновление. 1 Если разные транзакции меняют одни и те же данные, то может возникнуть ситуация, при которой изменения одной транзакции перезапишутся другой транзакцией. 1
- «Грязное» чтение. 1 Первая транзакция изменила данные, но ещё не зафиксировала свои изменения. 1 В это время вторая транзакция читает изменённые данные. 1 Если первая транзакция сделает отмену своих изменений, то получится, что вторая транзакция работает с данными, которых нет в базе данных. 1
- Неповторяющееся чтение. 1 Первая транзакция читает строку и получает одни значения. 1 После этого вторая транзакция меняет ту же строку, которая прочитала первая транзакция, или удаляет эту строку и фиксирует свои изменения. 1 Первая транзакция снова читает строку и получает уже другие данные, либо не получает данных, если вторая транзакция удалила строку. 1
- Фантомное чтение. 1 Первая транзакция делает выборку набора строк. 1 После этого приходит вторая транзакция и добавляет строки, попадающие в эту выборку. 1 Вторая транзакция фиксирует свои изменения. 1 После этого первая транзакция снова делает ту же самую выборку и получает другой набор строк, так как вторая транзакция добавила строки. 1
- Аномалия сериализации. 1 Результат выполнения двух параллельных транзакций не совпадает ни с одним из результатов последовательного их выполнения. 1
Когда несколько транзакций выполняются одновременно, они могут завершаться в непредсказуемом порядке. 4 Клиент, делающий последовательные запросы, может видеть результаты этих транзакций в порядке их завершения, а не в порядке их начала. 4