我们有一个运行Windows Server 2008R2 x64和SQL Server 2008R2 x64且安装/配置了SSRS的系统。这是一个由大量人使用的共享报告服务器,有一些相当大的低效数据库(400-500gb数据),这些用户使用该系统根据位于顶部的报告模型生成临时报告上述数据库。请注意,用户正在使用NTLM登录并识别正在运行的报告。
大多数报告都很快,但如果您运行一年或两年的数据报告,他们可能需要一段时间才能返回(5分钟时间)。这对大多数用户来说都很好,但是有些用户被卡在代理之后,代理的连接超时设置为2分钟。由于SSRS 2008R2似乎没有发回“保持活动”信号(通过wireshark确认),当运行其中一个长报告时,代理服务器认为连接已经死亡,因此它只是放弃并终止连接。这会给用户带来401或503错误并显然取消报告(不正确的错误是Microsoft拒绝修复的SSRS中的已知错误)。
我们从用户那里得到了很多抨击,即使这不是我们的问题。所以我正在寻找一个创造性的解决方案。
到目前为止,我已提出:
1)发现一些尚未知的SSRS设置,可以使连接保持活动状态
2)在用户和我们的报告服务器之间安装我们自己的代理服务器,它将发送保持活动状态(不确定这是否有效,而且有点hacky,只是创造性地思考!)
3)重新编写我们的报告数据库以提高效率(是的,这是最好的解决方案,但也非常昂贵)
4)问专家:) :)
我们与Microsoft支持人员预约了一个电话,看看他们是否可以提供帮助 - 但Stack上的任何专家都可以帮忙吗?我很欣赏这可能是服务器故障的一个更好的问题(我可能会在那里发布),但它确实是一个开发问题:)
谢谢!
答案 0 :(得分:1)
一些事情:
一个。对于SSRS的整体服务:
我个人使用保持活动服务,因为我认为SSRS服务器的默认回收时间为12小时。我使用了一个工具,有人把我叫做'VisualCron',可以自动完成许多任务流程。您也可以在WCF服务或类似的服务中拨打电话。基本上我知道用户当天的第一份报告通常很慢。通常,您需要点击http://(servername)/ ReportServer以使其保持活动状态。
B中。对于cachine报告级别项目:
如果这没有帮助,我建议尽可能缓存DataSet。有些人的数据是最新的,但很多人并非如此。您可以在SSRS中创建共享数据集,然后按计划缓存该数据集。因此,如果你有类似表的域,只需要在蓝色月亮中更新一次,就把它们放在那里。与每晚或分批的数据相同。如果您是基于交易的商店,那么这对于基于批处理的业务而言可能没有帮助,这可以带来巨大的帮助。
您还可以缓存其数据的报告,作为此项的延续。在/ Reports登录页面中的“管理”下拉列表中,您可以设置要在特定计划下运行的数据。您还可以设置一个快照,该快照是执行时的一个默认参数执行时的快照,并且是运行时报告的副本。
你提到ASP.NET所以我不确定如果你通过一个内部设置为传递的网站完成所有这些工作。但您也可以通过SSRS的订阅服务按计划发送电子邮件或保存文件。
℃。更改存储数据以进行报告的方式。
您可以创建查询的选定项级别值的报表仓库。创建一个只有近几年数据的小型数据库,只有某些字段和某些表。然后将其索引至死并报告。根据我的经验,这种方法在性能方面会有所提升,但它确实需要额外的设置开销。一般来说,大多数公司会抱怨这一点,但通常需要一天的时间来设置,然后你创建一个SSMS工作,每晚完成它或SSIS包然后你不担心它。我喜欢这种方法,因为我知道我的数据不会被生产报告,而且是个人孤立的。