显示 s-s-rS 报告的时间比 Execution Long 指示的时间长
Posted
技术标签:
【中文标题】显示 s-s-rS 报告的时间比 Execution Long 指示的时间长【英文标题】:s-s-rS Report takes longer to display than the Execution Long Indicates 【发布时间】:2013-08-07 14:57:52 【问题描述】:我有一份在 s-s-rS 2008 r2 上运行的报告。该报告是非常简单的 tablix 报告;没有子报表或类似的东西,甚至没有任何小计。用户希望报告“干净”,以便在将报告导出到 Excel 时可以轻松操作。此报告的查询是一个接受三个参数的存储过程。
在开发中,它的运行时间约为 30 秒或更短。存储过程的完成时间少于此时间,具体取决于所选的参数。 (客户编号、年份和月份。)现在它已经在生产服务器上运行了几个星期。并且客户端已经针对一组特定的参数运行了它,大约需要 30 分钟才能完成!我已经完成了通常的调试。 SP 需要大约 9 秒来处理这些参数。我读过the article about Parameter Sniffing,但不是这样。我已经检查了 ReportServer.dbo.ExecutionLog3 视图中的值。它们显示如下结果:
TimeStart: 2013-08-07 08:36:45.173
TimeEnd: 2013-08-07 08:37:08.943
TimeDataRetrieval: 11598
TimeProcessing: 3408
TimeRendering: 8171
所有这些似乎都表明报告在大约 23 秒内完成并呈现。但是报告在网页上显示大约需要 30 分钟!现在,这组特定的参数返回大约 20,000 条记录。并且没有分页,因为用户在将其导出到 Excel 时希望将所有这些都放在一个工作表上。但为了看看会发生什么,我尝试在每 100 条记录后引入一些分页。当我这样做时,报告在 30 秒内完成。 (但现在 Excel 工作簿中有 200 多个工作表。)
谁能告诉我为什么要花这么长时间才能显示?根据执行日志,这不是数据检索,不是处理,也不是渲染。那么它可以做什么呢?
谢谢,
斯科特
编辑:我忘了提到我还进入了报告的“处理选项”并更改了报告超时设置。它被设置为使用系统默认值(即 1800 秒或 30 分钟)。现在设置为“将报告处理限制在以下秒数”2700(或 45 分钟)。客户抱怨的原因是,当他尝试将报告导出到 Excel 时,他收到“rsExecutionNotFound”错误,推测是由于报告的会话超时。报告仍然在 30 分钟内运行,我仍然收到 rsExecutionNotFound 错误。所以我正在尝试解决根本问题。
【参考方案1】:我找到了解决方案。当我使用报告向导构建报告时,它会将 tablix 放在列表中。 (这允许它为 tablix 生成更多自定义标题,如this blog post 中所述。)显然,如果列表/tablix 不定期分页,则在 IE8+ 中显示报告需要很长时间。 (This other forum post 建议 Microsoft Premier Support 表示缓慢是 s-s-rS 2008 的一个错误。)无论如何,删除列表并仅放置一个没有自定义分组标题的 tablix 就可以了。报告会在大约 30 秒或更短的时间内正确呈现。
【讨论】:
【参考方案2】:我遇到了类似的问题......
我的报表通过存储过程从 SQL2008 中提取数据。
在 SSMS 中运行存储过程会在大约 8 秒内返回所有记录,但尝试运行报表会导致 VS2008 上的任务必须在 30 分钟后结束且没有返回结果。
我重构了 sp,删除了一个公用表表达式并用一个临时表替换它,报告在 30 秒内呈现!
我们的 SQL 服务器运行非常热 - 内存完全达到 10Gb(我无法控制这一点),因此使用临时表(写入 TempDB)似乎节省了足够的资源来呈现报告.
希望这会有所帮助。
干杯
迈克
【讨论】:
我认为您的 s-s-rS 服务器与您的 SQL Server 是同一台机器(物理或虚拟)?如果您的 SQL Server 正在消耗(几乎)所有可用资源,则应考虑将 s-s-rS 服务器移至另一台计算机。以上是关于显示 s-s-rS 报告的时间比 Execution Long 指示的时间长的主要内容,如果未能解决你的问题,请参考以下文章