Перейти к основному содержимому

Введение

В СУБД Pangolin для изоляции параллельных транзакций выбрана модель PostgreSQL MVCC (Multi Version Concurrency Control, управление параллельным доступом посредством многоверсионности). Реализация PostgreSQL предполагает хранение непосредственно в таблицах и индексах СУБД множества копий каждой модифицируемой записи, по одной на каждую из модификаций.

Постепенное накопление полностью устаревших версий записей (dead tuples), хранимых вместе с активными данными изменяемых объектов — известный недостаток реализации, который называется «раздуванием» или bloating. При раздувании таблиц и индексов расходуется дисковое пространство, заполняется память, падает производительность сервера. Требуется все больше и больше процессорных операций для выделения хаотично разбросанных действительных записей.

Устаревшие записи не получается выделить и удалить сразу же в момент устаревания. Причина в том, что они на протяжении произвольного промежутка времени требуются для работы нескольких взаимосвязанных механизмов сервера. Как минимум, исторических записей требуют:

  • соседние транзакции и их снимки операций (запросов);
  • мультитранзакции;
  • подготовленные транзакции;
  • физические реплики в меру возможного отставания от лидера.

Правила видимости данных в каждой из транзакций MVCC Pangolin основаны на сравнении 32-битного идентификатора транзакции с идентификаторами соседних транзакций и сроками действия версионированной истории каждой из записей. Пространство идентификаторов транзакций строго ограничено, поэтому по мере поступления новых транзакций требуется постоянное высвобождение номеров транзакций «древней истории» СУБД.

Описание объектов и настроек рассмотрено в разделах далее.