Как определить, какого вызова базы данных нет в транзакции

#.net #sql-server-2005 #transactions #timeout #profiling

#.net #sql-server-2005 #транзакции #тайм-аут #профилирование

Вопрос:

Я испытываю тайм-аут sql в моем .net-коде. Если прошлое является каким-либо показателем, это обычно вызвано тем, что вызов базы данных не включен в транзакцию. Каков хороший способ определить (во время выполнения), какого вызова базы данных нет в данной транзакции. Существуют ли определенные шаблоны / настройки, которые я должен использовать при запуске profiler (2005)? Будет ли журнал активности лучшим? Я знаю, какой вызов db завершается с ошибкой, я просто не знаю, что вызывает сбой вызова db.

Как большинство людей разбираются в этом?

Спасибо!

Комментарии:

1. По моему опыту, обычно это утечка транзакции — какое-то соединение открыло транзакцию, сделало все, что намеревалось, а затем отключилось, оставив соединение / транзакцию открытой, что приводит к блокировке других транзакций. (И в том числе по ссылке на ответ Одеда здесь также).

Ответ №1:

Каждая инструкция SQL, которая выполняется на SQL Server, закончится транзакцией — если явной нет, будет существовать неявная инструкция.

Другими словами — всегда есть транзакция.


Что касается проблемы — используйте профилировщик SQL Server — подключите его к соответствующему серверу и запустите поведение, которое отображает проблему.

Трассировка должна показать вам все соответствующие события базы данных и позволить вам устранить проблему.