Мы используем SQL Server 2005 со службами отчетов.
У нас есть несколько отчетов, каждый из которых содержит относительно простой запрос SQL - под словом «относительно» я подразумеваю, что у нас есть несколько объединений, но ничего хуже. Мы не вызываем хранимые процедуры в наших запросах - это не случайный анализ параметров.
При выполнении одного из этих отчетов (назовем его отчетом A) через службы Reporting Services для его выполнения требуется очень много времени - порядка десятков минут или даже часов. При выполнении соответствующего запроса SQL в Query Analyzer он завершается через несколько секунд.
Количество строк, возвращаемых из базы данных, может быть всего 1 - но отчет так и не завершится.
Остальные отчеты работают нормально.
Глядя в таблицу ExecutionLog в службах Reporting Services, я вижу, что большую часть времени находится в TimeDataRetrieval (а мы говорим миллионы секунд здесь ...) - в те моменты, когда отчет фактически завершается. Если отчет отменяется вручную, TimeDataRetrieveal равен нулю, а вместо этого TimeProcessing невероятно высок.
Я просмотрел журналы Reporting Services, но все выглядит нормально.
Теперь, прежде чем вы начнете предлагать "блокировку" - ну, в наших запросах включена подсказка nolock.
В нынешнем виде я достиг предела своего воображения, пытаясь найти ошибку. Любые мысли, идеи будут с благодарностью.
/ Кристоффер