Что именно вы подразумеваете под «последовательными транзакциями»? Две транзакции, выполняющиеся последовательно, или две транзакции, выполняемые с уровнем изоляции сериализации? Ваша программа на C # гарантированно будет выполнять только один рабочий процесс за раз, или есть какой-либо параллелизм между двумя экземплярами программы (обычно в ASP.Net, WCF, WF и многих других сценариях с размещенным кодом) )
Другой распространенной ошибкой может быть то, что у вас есть незавершенные шаги в рабочем процессе. Скажем, Step1 запускает транзакцию в ConnecitonA, а затем завершает без фиксации. Когда логика переходит к шагу 2, выполняет новую транзакцию в ConnectionB, она вполне может конфликтовать и блокироваться с незавершенной работой, оставшейся от шага 1. Это будет фактический параллелизм на уровне базы данных после полного сериализованного выполнения на клиенте.
Возможно ли, что sql сообщит
что выполнение завершено, до того
на самом деле?
нет
Нет
Может ли замок сохраняться через
завершена транзакция?
Нет (по всем практическим причинам блокировки области сеанса применяются только к блокировкам или блокировкам использования базы данных).
Есть что-нибудь еще, что я должен посмотреть
чтобы понять, что происходит?
На сервере будет достаточно средств для устранения неполадок. Между Профилировщиком, информацией о графике тупиков, sys.dm_exec_requests
и sys.dm_tran_locks
, вся необходимая информация находится здесь.