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

Транзакции и изоляция: как не устроить дедлоки и грязные чтения в проде

Транзакции и изоляция: как не устроить дедлоки и грязные чтения в проде

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

Базовые правила: — начинайте транзакцию как можно позже; — заканчивайте как можно раньше; — не мешайте в одной транзакции долгий I/O, сетевые вызовы и пользовательский ввод; — обновляйте строки в одном и том же порядке, иначе дедлоки придут без приглашения. Схема простая, но дьявол кроется в статистике: короткая транзакция под нагрузкой почти всегда дешевле «безопасной», но длинной.

По изоляции помните: READ COMMITTED обычно закрывает грязные чтения, но не спасает от неповторяемых чтений и фантомов; REPEATABLE READ и SERIALIZABLE дают больше гарантий, но платят за это блокировками, версионностью и падением параллелизма. В продакшене так лучше не делать, и вот почему: максимальную изоляцию часто включают «на всякий случай», а потом ищут, почему CPU и I/O живут своей жизнью.

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

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

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

start

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

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

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