Конференция "Базы" » Как правильно разруливать дедлоки?
 
  • Интересующийся (01.04.14 12:54) [0]
    Есть база, к которой (через разные соединения) обращается несколько потоков. Случается - что разные потоки пытаются (почти) одновременно обновить данные в базе. Выполняю рекомендации по раздалению транзакций на читающие/пишущие, короткие пишущие. Однако это не всегда помогает - всё равно случаются дедлоки (deadlock update conflicts with concurrent update). Из-за этого приходится приостанавливать некоторые потоки. Вся кухня по разруливанию дедлоков отнимает достаточно много времени и кода. Фактически приходится заниматься сериализацией обращений к базе. Можно ли как-то обрабатывать дедлоки, что бы не заниматься сериализацией? Возможно база сама умеет как-то 'придерживать' потоки до завершения конкрурентных транзакций? Версия базы? Ну пусть будет FB 2.0.
  • turbouser © (01.04.14 13:11) [1]
    уровни изоляции какие?
  • RWolf © (01.04.14 13:29) [2]
    есть же ждущие транзакции.
  • Интересующийся (02.04.14 14:08) [3]
    Посмотрел еще раз. Не все так просто. Пока один поток пытается запись изменить, другой её пытается удалить. Буду что-то с логикой думать.
  • Труп Васи Доброго © (02.04.14 16:48) [4]
    это читал? http://www.firebirdfaq.org/faq151/
    Рекомендации выполнил?

    > Буду что-то с логикой думать.

    Хорошее направление мысли. Если часто возникают такие ситуации, то надо, как и рекомендуется, запихивать всё в ХП и использовать проверки в триггерах.
 
Конференция "Базы" » Как правильно разруливать дедлоки?
Есть новые Нет новых   [118452   +47][b:0][p:0]