#.net #sql-server-2005 #transactions #timeout #profiling
#.net #sql-server-2005 #транзакции #тайм-аут #профилирование
Вопрос:
Я испытываю тайм-аут sql в моем .net-коде. Если прошлое является каким-либо показателем, это обычно вызвано тем, что вызов базы данных не включен в транзакцию. Каков хороший способ определить (во время выполнения), какого вызова базы данных нет в данной транзакции. Существуют ли определенные шаблоны / настройки, которые я должен использовать при запуске profiler (2005)? Будет ли журнал активности лучшим? Я знаю, какой вызов db завершается с ошибкой, я просто не знаю, что вызывает сбой вызова db.
Как большинство людей разбираются в этом?
Спасибо!
Комментарии:
1. По моему опыту, обычно это утечка транзакции — какое-то соединение открыло транзакцию, сделало все, что намеревалось, а затем отключилось, оставив соединение / транзакцию открытой, что приводит к блокировке других транзакций. (И в том числе по ссылке на ответ Одеда здесь также).
Ответ №1:
Каждая инструкция SQL, которая выполняется на SQL Server, закончится транзакцией — если явной нет, будет существовать неявная инструкция.
Другими словами — всегда есть транзакция.
Что касается проблемы — используйте профилировщик SQL Server — подключите его к соответствующему серверу и запустите поведение, которое отображает проблему.
Трассировка должна показать вам все соответствующие события базы данных и позволить вам устранить проблему.