Проверяет понимание того, как транзакции влияют на производительность, блокировки и корректность данных.
Граница транзакции — это отрезок кода, в котором данные читаются и изменяются атомарно. Если транзакция слишком длинная — растут блокировки и задержки; слишком короткая — нарушается консистентность. Нужно выбирать границы так, чтобы внутри транзакции были только операции, которые действительно должны быть атомарными.
Под “transaction boundary” понимают точки начала и конца транзакции, определяющие область, в которой база данных гарантирует атомарность, консистентность и изоляцию операций.
Неправильно выбранная граница вызывает:
Долгие блокировки
Длинная транзакция удерживает блокировки дольше, чем нужно.
Это приводит к deadlocks и «зависшим» запросам.
Рост времени выполнения
Любая логика вне БД (HTTP-запросы, RPC) внутри транзакции делает её небезопасной.
Снижение пропускной способности
Транзакции конкурируют за ресурсы, и производительность падает.
Правильная граница означает, что:
транзакция охватывает только то, что должно быть атомарным
нет внешних запросов внутри транзакции
чтения и записи строго локализованы
Пример правильного подхода:
tx, _ := db.BeginTx(ctx, nil)
// читаем
item, _ := tx.GetItem(id)
// изменяем
item.Count--
_ = tx.UpdateItem(item)
_ = tx.Commit()