Очень простая хранимая процедура будет иметь тайм-аут
-
19-09-2019 - |
Вопрос
У меня проблема с одной хранимой процедурой, которая работает в 99% случаев во всем нашем приложении, но истекает по таймауту при вызове из определенной части приложения.
Таблица имеет всего 3 столбца и содержит около 300 записей.Сохраненная процедура вернет только одну запись и выглядит так
«Выберите * из таблицы, где столбец = @parameter»
Когда sp выполняется в студии управления, это занимает 0:00 секунд.
Хранимая процедура часто используется в нашем приложении, но время ожидания истекает только в одной конкретной части нашей программы.Я не могу придумать причину, по которой такой простой sp может истечь.Есть идеи?
Это настольное приложение vb.net, использующее SQL Server 2005.
Решение
У вас есть некоторый код, который уже держит замок на столе, поэтому он не может быть прочитан.
Другие советы
пытаться
SELECT * FROM Table WITH (NOLOCK) WHERE Column = @parameter
У нас была очень похожая проблема: у нас было несколько хранимых процедур, которые сохраняли тайм-аут в приложении (~ 30 секунд), но нормально работали в SSMS.
Краткосрочное решение, которое мы использовали, заключалось в повторном запуске хранимых процедур, что временно устранило проблему.Если это также временно решит проблему для вас, вам следует изучить проблемы с анализом параметров.
Дополнительную информацию см. http://dannykendrick.blogspot.co.nz/2012/08/sql-parameter-sniffing.html
вам нужно получить показатели производительности.Используйте профилировщик sql, чтобы убедиться, что SP в это время работает медленно или что-то еще.Если в это время медленный sql - подумайте о таких вещах, как блокировки, которые могут заставлять ваш запрос ждать.Дайте нам знать, и мы сможем предоставить более конкретную информацию на этом этапе.
Если это не SP, а скажем код VB, то приличный профиль типа Муравьи RedGate или DotTrace от JetBrains может помочь.