Блокировки в БД
Это механизм, который гарантирует, что два процесса не испортят одни и те же данные одновременно.
Простая аналогия:
Представьте общественный туалет:
Когда кто-то внутри — дверь закрыта на замок (exclusive lock)
Остальные ждут в очереди
Никто не может зайти, пока первый не выйдет
Зачем нужны?
Без блокировок:
→ Два человека одновременно меняют баланс одного счёта
→ Первый: баланс = 100
→ Второй: баланс = 200
→ Результат: кто последний — тот и прав
→ Деньги потерялись 💸
С блокировками:
→ Первый заблокировал запись → поменял → отпустил
→ Второй получил доступ → поменял → отпустил
→ Всё честно ✅
Типы блокировок:
Shared: Многие могут читать, но никто не пишет
Exclusive:
Только один пишет, остальные ждут
Intent: «Я планирую заблокировать часть таблицы»
Проблемы:
1. Блокировки (Locks)
→ Один процесс держит данные
→ Остальные ждут
→ Решение: делать транзакции короткими
2. Взаимная блокировка (Deadlock)
→ Процесс A держит X, хочет Y
→ Процесс B держит Y, хочет X
→ Оба ждут вечно
→ Решение: БД убивает одну из транзакций (rollback)
Как избежать проблем?
✅ Делать транзакции короткими
✅ Блокировать минимум данных
✅ Обращаться к таблицам в одинаковом порядке
✅ Использовать оптимистичные блокировки (версионирование)
✅ Настраивать таймауты на ожидание
Мораль:
Блокировки — это как очередь в туалет.
Неприятно ждать, но без очереди будет хуже 😅
Post #77
231

- 😁 5
- 🤬 1