IT-словарь › Базы данных › Gap lock

Gap lock

Базы данных Svenska → Обновлено: 2026-10-18

Механизм блокировок MySQL/InnoDB, блокирующий «промежуток» между значениями индекса — не только существующие строки, но и диапазон, куда могут вставить новые. Так на уровне Repeatable Read предотвращаются фантомные чтения.

Проблема, которую он решает: без gap lock другая транзакция могла бы вставить строку в середину только что прочитанного диапазона — появился бы «фантом», ломающий Repeatable Read. «Next-key lock» в InnoDB — это блокировка строки плюс блокировка промежутка перед ней. На практике SELECT ... WHERE x BETWEEN 10 AND 20 FOR UPDATE блокирует и промежутки, так что строку с x из этого диапазона не вставить.

Цена: защита от фантомов приводит к неожиданным взаимоблокировкам и задерживает вроде бы не связанные вставки — частый источник загадочных конфликтов в InnoDB. При Read Committed gap lock исчезают, и это одна из причин снижать изоляцию для некоторых нагрузок. Особенность InnoDB, которая регулярно удивляет разработчиков.

← Назад к словарю