Senior
64
Jaké blokace se vyskytují v PostgreSQL při vytváření unikátního indexu na sloupci? Jak PostgreSQL vytváří a mění záznamy (MVCC)?
Společnosti byly požádány
Сбербанк
Odpověď od AI
sobes.tech AI
Блокировки при создании уникального индекса в PostgreSQL:
При создании уникального индекса PostgreSQL использует блокировки, чтобы гарантировать целостность данных:
- На время создания индекса таблица блокируется в режиме
ACCESS EXCLUSIVE LOCK— это самая строгая блокировка, которая блокирует все операции чтения и записи. - Это необходимо, чтобы избежать изменений данных во время построения индекса и гарантировать уникальность.
MVCC (Многоверсионность) в PostgreSQL:
PostgreSQL реализует MVCC для обеспечения изоляции транзакций без блокировок чтения:
- Каждая строка содержит служебные поля с идентификаторами транзакций, которые её создали и удалили.
- При чтении транзакции видят только те версии строк, которые были актуальны на момент начала транзакции.
- При обновлении создаётся новая версия строки с новым xmin (идентификатором транзакции), старая версия помечается как удалённая (с xmax).
- Удалённые версии остаются в таблице до тех пор, пока не будет выполнена очистка (vacuum).
Таким образом, записи не блокируются при чтении, а блокировки применяются только при модификации, что повышает параллелизм и производительность.