powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / deadlocks
4 сообщений из 4, страница 1 из 1
deadlocks
    #32022813
andy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос заключается в следующем, можно ли в принципе при помощи АДО смоделировать ситуацию дедлока? Проблема здесь заключается в том, что 2 апдэйта внутри одной транзакции АДО порождают 2 процесса в SQL server'е и выброса ошибки 1205 не происходит, вместо этого оба заблокированных запроса благополучно вылетают с таймаутом, хотя ситуация, вообще говоря, типичная deadlock'овая.

1-я транзакция
update a set id = id where id = 5
update b set id = id where id = 5

2-я транзакция
update b set id = id where id = 5
update a set id = id where id = 5

соответственно вторые запросы, в каждой транзакции не смогут быть выполнены, если к этому моменту уже завершились первые, но deadlockа не происходит :0(.
...
Рейтинг: 0 / 0
deadlocks
    #32022815
andy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть идея, что всё это происходит если использовать адошные методы для открытия и закрытия транзакции, а они вызывают
SET IMPLICIT_TRANSACTIONS ON, что приводит к тому, что каждый update делается в своей транзакции, которые правда коммитиятся или откатываются одновременно, т.е. фактически это поведение вложенных транзакций.
...
Рейтинг: 0 / 0
deadlocks
    #32022827
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без разницы чем моделировать ситуацию с deadlock'ом. ADO, не ADO... Все равно работа с транзакциями идет на уровне сиквела. Ну, например, сделайте тестик на VB, поместив на форму 6 кнопок - "start transaction", "work", "end transaction" для 1-й транзакции и тоже самое для 2-й. Глобально определяем 2 переменные-коннекты и на кнопки привешиваем соответствующую обработку. На work - апдейты, на остальные понятно что. Ну и соответственно давим их в следующем порядке -
"start tran 1"
"start tran 2"
"work 1"
"work 2"
"end tran 1"
"end tran 2"

Должно появиться сообщение о дедлоке. То же самое можно сделать через Query Analizer, в качестве глобальных коннектов используя 2 подключения.
...
Рейтинг: 0 / 0
deadlocks
    #32022929
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего проблема в том, что в свойтсвах Command у вас выставлен таймаут по умолчанию (30 сек). А дедлок определяется обычно SQL-сервером с более длинным интервалом. Клиент просто не успевает дождаться сообщения о дедлоке.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / deadlocks
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]