Оптимизация производительности баз

Транзакции и уровни изоляции: где ломается логика и растут блокировки

Транзакции и уровни изоляции: где ломается логика и растут блокировки

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

По уровням изоляции правило простое: чем выше защита от аномалий, тем дороже параллелизм. — Read Committed обычно закрывает грязные чтения, но не спасает от неповторяемых. — Repeatable Read и Serializable дают больше гарантий, но могут заметно увеличить блокировки и откаты из-за конфликтов. — Snapshot снижает чтение под блокировками, но требует контроля за версионированием и местом под версии.

В продакшене так лучше не делать, и вот почему: держать транзакцию открытой «на всякий случай» после чтения, а потом еще думать в коде. Сначала забрали данные, потом пошли в сеть, потом вернулись обновлять — между этими шагами мир уже поменялся. Если нужна согласованность, делайте короткую транзакцию вокруг именно той части, где нужна атомарность. Если нужна проверка конкуренции — используйте явную блокировку или оптимистичный контроль версий, но осознанно.

Золотое правило: сначала мониторинг, потом индексы. Смотрите на длительность транзакций, waits, deadlock graph и рост версии строк. Если коротко: чем меньше работы внутри транзакции, тем спокойнее живет база, а изоляцию подбирают под инвариант, а не под страх перед ошибками.
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.