Sql server 2008 r2 SSRS报告在prod中非常慢,但SQL查询运行得很快

Sql server 2008 r2 SSRS报告在prod中非常慢,但SQL查询运行得很快,sql-server-2008-r2,Sql Server 2008 R2,我花了几个小时来解决这个问题,我需要一些新的视角 我们在SSRS中有一个相对简单的报告设置,简单的矩阵,顶部有列,数据点向下。报告背后的SQL查询“中等”复杂度——有一些子查询和几个连接,但没有什么真正的疯狂 这份报告几个月来一直运作良好,最近变得非常缓慢。比如,15-20分钟生成报告。我可以将报表设计器中的SQL查询剪辑并粘贴到SQL Mgmt Studio中,替换必要的变量,它将在不到2秒钟的时间内返回结果。我甚至使用SQL profiler获取SSRS正在执行的确切查询,并将其剪切粘贴到M

我花了几个小时来解决这个问题,我需要一些新的视角

我们在SSRS中有一个相对简单的报告设置,简单的矩阵,顶部有列,数据点向下。报告背后的SQL查询“中等”复杂度——有一些子查询和几个连接,但没有什么真正的疯狂

这份报告几个月来一直运作良好,最近变得非常缓慢。比如,15-20分钟生成报告。我可以将报表设计器中的SQL查询剪辑并粘贴到SQL Mgmt Studio中,替换必要的变量,它将在不到2秒钟的时间内返回结果。我甚至使用SQL profiler获取SSRS正在执行的确切查询,并将其剪切粘贴到Mgmt Studio中,仍然是一样的,亚秒级的结果。指定的参数和日期范围没有任何区别,我可以设置参数以返回一个小数据集(<100行)或一个大数据集(>10000行),但结果仍然相同;在Mgmt Studio中速度极快,但需要20分钟才能生成SSRS报告

到目前为止,我尝试过的故障排除: 删除并重新部署SSRS中的报告。 在VisualStudioIDE的多台机器和SSRS服务器上进行测试,速度相同(约20分钟) 使用SQL Profiler监视执行报告的SPID,捕获正在执行的所有SQL语句,并在Mgmt Studio中单独(和一起)尝试它们--在Mgmt Studio中运行速度快(<2秒)
在报告执行期间监视服务器性能。处理器在20分钟的报告生成过程中受到了极大的冲击,磁盘I/O略高于基线

检查执行计划,以确保参数嗅探和/或set_选项的差异组合不会生成两个单独的执行计划

这是我在从ADO.Net和SSMS执行查询时遇到的一个场景。当使用不同的选项创建不同的执行计划时,会出现问题。SQL Server利用传入的参数值尝试进一步优化生成的执行计划。我发现每个生成的执行计划都使用了不同的参数值,从而产生了最优和次优计划。我现在找不到我最初的查询来检查这个问题,但是快速搜索就会发现这篇文章与同一个问题有关

如果您使用的是SQLServer2008,那么还可以通过名为“优化未知”的查询提示提供另一种方法,该方法本质上禁用参数嗅探。下面是一篇文章的链接,这篇文章帮助我对这一特性进行了最初的研究

对于2008年之前的版本,上述方法的替代方法是将参数值存储在过程中的局部变量中。其行为方式与上面的查询提示相同。这个技巧来自下面的文章(在编辑中)


编辑

再搜索一下,发现了一篇文章,对这个主题进行了非常深入的分析,以防有用,链接如下


这个问题对我们来说也是个问题。我们正在运行CRM 2011的SSRS报告。我已经尝试了一些建议的解决方案(将输入参数映射到局部变量,通过重新编译添加到存储过程),但没有任何运气

这篇关于报表服务器应用程序内存配置()的文章,更具体地说,将4000000值添加到我们的RSReportServer.config文件解决了这个问题


需要30-60秒才能呈现的报告现在在不到5秒的时间内完成,这与在SSMS中执行底层存储过程所需的时间大致相同。

您将4000000值分配给了哪个关键字?