Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: deadlock, transaction

Сталкивались ли с дедлоками транзакций?

Вопрос проверяет опыт работы с конкурентными транзакциями и понимание причин взаимных блокировок.

Короткий ответ

Дедлок — это ситуация, когда транзакции блокируют друг друга и не могут продолжить выполнение. База данных обнаруживает дедлок и откатывает одну из транзакций. Такое может происходить при неправильном порядке обновления данных. Проблема решается упорядочиванием операций и корректной архитектурой.

Длинный ответ

Дедлоки — нормальное явление в системах с параллельной записью, но их нужно уметь предотвращать.

1) Что такое дедлок

Определение:
Дедлок — это ситуация, когда две или более транзакции навсегда ждут освобождения ресурсов друг от друга.

2) Пример дедлока

Транзакция A:

UPDATE users SET name = 'A' WHERE id = 1;
-- ждёт блокировку id = 2

Транзакция B:

UPDATE users SET name = 'B' WHERE id = 2;
-- ждёт блокировку id = 1

3) Как БД решает проблему

  • Обнаруживает цикл ожидания

  • Прерывает одну транзакцию

  • Выбрасывает ошибку дедлока

4) Как предотвращать дедлоки

  • Всегда обновлять данные в одном порядке

  • Делать транзакции короткими

  • Избегать лишних блокировок

  • Использовать подходящие индексы

5) Что делать на уровне приложения

  • Обрабатывать ошибку дедлока

  • Делать ретраи

  • Логировать проблемные места

Краткий вывод

Дедлоки возникают из-за конкуренции за ресурсы. Их можно минимизировать правильным порядком операций и короткими транзакциями, а на уровне кода — обрабатывать и повторять операции.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Postgres

    Postgres

Ключевые слова

#deadlock

#transaction

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.