Вопрос

У меня проблема с одной хранимой процедурой, которая работает в 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 может помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top