0

我们有一个运行 Windows Server 2008R2 x64 和 SQL Server 2008R2 x64 并安装/配置了 SSRS 的系统。这是一个被很多人使用的共享报告服务器,有一些相当大的低效数据库(400-500gb 的数据 ish),这些用户使用该系统基于位于顶部的报告模型生成临时报告上述数据库。请注意,用户正在使用 NTLM 登录和识别以运行报告。

大多数报告都很快,但如果您正在运行一份包含 1 年或 2 年数据的报告,它们可能需要一段时间才能返回(大约 5 分钟)。这对大多数用户来说都很好,但是有些用户被困在代理后面,该代理的连接超时设置为 2 分钟。由于 SSRS 2008R2 似乎没有发回“保持活动”信号(通过 wireshark 确认),因此在运行这些长报告之一时,代理服务器认为连接已断开,因此它只是放弃并终止连接。这会给用户一个 401 或 503 错误,并且显然会取消报告(不正确的错误是 SSRS 中的一个已知错误,微软拒绝修复)。

我们从用户那里得到了很多关于这个的抨击,即使这不是我们的问题..所以我正在寻找一个创造性的解决方案。

到目前为止,我想出了:

1) 发现一些未知的 SSRS 设置,可以使其保持连接。
2)在用户和我们的报告服务器之间安装我们自己的代理,它将发送一个keep-alive返回(不确定这会起作用,它有点hacky,只是创造性地思考!)
3)重写我们的报告数据库是更高效(是的,这是最好的解决方案,但也非常昂贵)
4)请教专家 :) :)

我们已经与 Microsoft 支持人员预约了电话,看看他们是否可以提供帮助 - 但 Stack 的任何专家都可以提供帮助吗?我很欣赏这对于服务器故障来说可能是一个更好的问题(我可能会在那里发布)但它真的是一个开发问题:)

谢谢!

4

1 回答 1

1

一些东西:

A. 对于 SSRS 的整体服务:

我个人使用保活服务,因为我相信 SSRS 服务器的默认回收时间是 12 小时。我使用了一个名为“VisualCron”的工具,它可以自动完成许多任务流程。您也可以只在 WCF 服务或类似服务中进行调用。基本上我知道用户当天的第一份报告通常很慢。通常你需要点击 http:// (servername)/ReportServer 来让它保持活跃。

B. 对于缓存报告级别项目:

如果这没有帮助,我建议尽可能缓存数据集。有些人拥有最新的数据,但对很多人来说并非如此。您可以在 SSRS 中创建共享数据集,然后按计划将其缓存。因此,如果您有类似域的表,只需要在蓝月亮中更新一次,请将它们放在那里。与每晚或成批的数据相同。如果您是目前为止基于交易的商店,这可能无济于事,但对于基于批处理的企业,这可能会有很大帮助。

您还可以缓存报告以获取其数据作为此操作的延续。在 /Reports 登录页面中的“管理”下拉列表中,您可以将数据设置为在特定计划下运行。您还可以设置一个快照,这是它的扩展,因为它使用按计划设置的一些默认参数执行,并且是运行时报告的副本。

你提到了 ASP.NET,所以我不确定如果你通过一个你在内部设置为传递的网站来做这一切,这其中有多少会起作用。但是您也可以通过 SSRS 的订阅服务按计划发送电子邮件或保存文件。

C. 更改存储数据以进行报告的方式。

您可以创建一个包含查询的选定项目级别值的报表仓库。创建一个只有最近几年的数据并且只有某些字段和某些表的小型数据库。然后将其索引到死亡并报告。以我的经验,这种方法在性能方面会飞起来,但它确实需要额外的设置开销。一般来说,大多数公司都会对此抱怨,但通常需要一天的时间来设置,然后你创建一个 SSMS 作业,每晚完成它或一个 SSIS 包,然后你就不用担心了。我喜欢这种方法,因为我知道我的数据不会从生产中报告出来并且是个人隔离的。

于 2013-06-26T23:31:05.613 回答