我正在做一个大型应用程序,我在报告中使用列分组。不幸的是,性能慢得可怜,我的客户正在抱怨它。例如,如果他们运行 24 小时的报告,则需要约 10 分钟才能返回(约 800 显示页的数据)。如果他们运行它一个月,它可能永远不会回来!
24 小时内的查询本身会在约 20 秒内返回。时间的平衡是旋转和生成报告。
你有什么建议吗?
谢谢!
我正在做一个大型应用程序,我在报告中使用列分组。不幸的是,性能慢得可怜,我的客户正在抱怨它。例如,如果他们运行 24 小时的报告,则需要约 10 分钟才能返回(约 800 显示页的数据)。如果他们运行它一个月,它可能永远不会回来!
24 小时内的查询本身会在约 20 秒内返回。时间的平衡是旋转和生成报告。
你有什么建议吗?
谢谢!
Reporting Services 在创建报表时分为三个阶段:
如果您的查询在大约 20 秒内返回数据,但报告需要 10 分钟来呈现,那么主要问题在于报告处理的速度(呈现很少是性能瓶颈),正如您正确假设的那样。提高性能的最佳方法是通过重写查询以在源数据库中进行聚合,从而将尽可能多的聚合卸载到源数据库。数据库平台在聚合数据方面通常比 Reporting Services 快得多。理想情况下,您希望返回报告所需的最少数据量,以便尽可能少地进行处理。
如果您有权访问 ReportServer 数据库,请运行此查询以确认瓶颈在哪里:
SELECT ItemPath, Format, TimeStart, TimeEnd, TimeDataRetrieval, TimeProcessing, TimeRendering, [Status], ByteCount, [RowCount]
FROM ExecutionLog3
WHERE ItemPath LIKE '%My Report Name%'
TimeDataRetrieval、TimeProcessing 和 TimeRendering 应该让您清楚地了解问题所在。如果问题与 TimeProcessing 有关,则尝试重写查询以减少报告的数据,并查看可能的设计问题以查看是否有任何问题适用。
检查以确保您在报表端而不是查询端进行排序。这可以加快速度。在报表中对组进行排序或按聚合值排序比在查询中要简单得多,而且通常也更有效。
看看这些加快性能的技巧。 故障排除报告:报告性能