use*_*654 8 performance sql-server-2008 reporting-services ssrs-2008
我有一个存储过程,使用SSMS中最多2个核心,在10秒内返回大约50000条记录.使用存储过程的SSRS报告需要20分钟,并且会在整个8核服务器上最大化处理器.该报告相对简单(即没有图表,计算).当我将50K行写入临时表时,报告似乎不是问题,报告可以在几秒钟内显示数据.我尝试了许多不同的想法来测试每次更改存储过程,但是将原始代码保存在一个单独的窗口中以恢复为原样.在存储过程的一个Alter之后,返回到原始代码,报告和服务器利用率开始快速运行,与单独的存储过程的性能相当.现在一切都很好,但是我希望能够找到导致这种情况再次发生的原因.有任何想法吗?
当您正常执行存储过程时,我会首先对存储过程进行 SQL Profiler 跟踪,然后在 SSRS 调用它时对同一 SP 进行跟踪。确保包含所涉及的执行计划,这样您就可以看到它是否做出了一些错误的决定(尽管这似乎不太可能 - SQL Server 应该执行最佳的 - 或至少一致的 - 计划,无论查询的来源如何)。
我们曾经遇到过这样的情况,业务对象会无缘无故地执行存储过程数十次,并且偶尔会导致糟糕的性能,尽管我从未在 SSRS 中看到过同样的行为。不过,这可能是一个起点。您还将看到执行开始/结束时间 - 这将清楚地表明是否是数据库层挂起,或者 SQL Server 在 10 秒内交回数据,然后是 SSRS 服务在某处阻塞。