在SQL Reporting Services中提高数据驱动订阅性能的最佳方法是什么?

时间:2015-01-11 18:13:02

标签: sql-server reporting-services

我需要每天提供数千封电子邮件报告以支持业务运营。目前我使用SQL Server Reporting Services来实现这一点。虽然SSRS非常稳定可靠,但对于我的特定用例来说似乎也很慢,需要30多分钟才能完成一些数据驱动的订阅。

数据驱动订阅使我们有机会在报表服务器中存储T-SQL查询,该查询选择我们要发送到的电子邮件地址以及我们要输入到报表中的参数,并将其设置为按计划运行。这很有用,因为它允许我们选择以最佳方式为收件人个性化报表的部门,货币和其他参数。然而,即使是具有少量参数的报告,也存在有限的,少量的排列。例如,对于我们每天发送10k封电子邮件的一份报告,每天只发送12种排列。我真正想要的是用这12个排列预加载缓存。

SSRS允许您缓存报告。我启用此功能并保留默认的30分钟,并且在使用数据驱动订阅运行时似乎没有效果。换句话说,我运行了订阅,它发送大约950封电子邮件,然后缓存,然后缓存,订阅的运行时间相同 - 它没有任何影响。

我还试图使用快照,这听起来很完美。不幸的是,快照仅适用于默认参数值。看起来没有办法用可能的参数值的每个排列存储快照 - 这就是我想要的东西。从已经汇编的快照中通过电子邮件发送数千份报告可以加快速度。

有没有人为此找到任何解决方法?

1 个答案:

答案 0 :(得分:1)

您是否可以减少数据驱动订阅背后的视图中的行数?

例如,

而不是

to: joe@abc.com   parameter1:55
to: billy@abc.com parameter1:55
to: bob@abc.com   parameter1:66`

它将是

bcc: joe@abc.com, billy@abc.com parameter1:55
bcc: bob@abc.com                parameter1:66

我认为最好寻找避免生成10k倍相同文件的方法,而不是通过缓存来优化性能等。如果你不能像上面那样做,我会尝试让ssrs生成你需要的文件然后处理电子邮件外部订阅。