生产服务器中的 SSRS 报告超时(刷新 3 次后除外)
SSRS Report Timing out in Production Server (except after refreshing 3 times)
该报告在 DEV 和 QA 服务器中运行良好,但在生产环境中出现以下错误:
An error occurred during client rendering.
An error has occurred during report processing.
Query execution failed for dataset 'Registration_of_Entity'.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
奇怪的是,管理员向我保证,此报告现已设置,因此根本没有超时。
每天早上刷新报告 3 次,错误消息消失。
我该怎么做才能解决这个问题,使报告永远不会收到这个错误?
您知道您的查询是否陷入僵局吗?可能是报告在高峰时段在服务器上被阻止。
考虑优化您的查询,或者如果可以读取未提交的数据,请在每个 FROM 和 Join 子句后添加 WITH (NOLOCK)。如果您不熟悉它,请务必 google WITH(NOLOCK),这样您就知道 read uncommitted 可以做什么。
有几个步骤可以正确解决这个问题。
我建议按照以下顺序关注它们:
1.减少查询执行时间
在 SSMS 中执行数据集 Registration_of_Entity
的查询,看看需要多长时间才能完成。
如果您的查询需要比为 DataSet 指定的超时时间更多的时间来执行,您应该首先尝试减少这个时间,例如:
- 更改查询结构(重新考虑连接,使用 CTE,...)
- 添加索引
查看执行计划会有帮助。
2。降低查询复杂度
这些都需要吗rows/columns?
您需要在数据库端进行所有这些计算吗?
可以改为在报告中完成吗?
您可以尝试:
- 降低查询复杂度
- 将查询拆分为更小的查询
同样,查看执行计划会有帮助。
3。探索与查询本身无关的其他优化
您确实需要这个查询,但是您需要实时数据吗?
此服务器上是否正在执行许多其他查询?
您可以查看:
- 缓存
- 复制/负载平衡
Note that from SSRS 2008 R2, the new Shared DataSets can be cached. I
know it doesn't apply in your case but who knows, it could help
others.
4.不得已
如果上述所有步骤都无法解决问题,那么您可以增加超时时间。
Here 是一个 link 博客 post 解释不同的超时以及如何增加它们。
该报告在 DEV 和 QA 服务器中运行良好,但在生产环境中出现以下错误:
An error occurred during client rendering.
An error has occurred during report processing.
Query execution failed for dataset 'Registration_of_Entity'.
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
奇怪的是,管理员向我保证,此报告现已设置,因此根本没有超时。
每天早上刷新报告 3 次,错误消息消失。
我该怎么做才能解决这个问题,使报告永远不会收到这个错误?
您知道您的查询是否陷入僵局吗?可能是报告在高峰时段在服务器上被阻止。
考虑优化您的查询,或者如果可以读取未提交的数据,请在每个 FROM 和 Join 子句后添加 WITH (NOLOCK)。如果您不熟悉它,请务必 google WITH(NOLOCK),这样您就知道 read uncommitted 可以做什么。
有几个步骤可以正确解决这个问题。
我建议按照以下顺序关注它们:
1.减少查询执行时间
在 SSMS 中执行数据集 Registration_of_Entity
的查询,看看需要多长时间才能完成。
如果您的查询需要比为 DataSet 指定的超时时间更多的时间来执行,您应该首先尝试减少这个时间,例如:
- 更改查询结构(重新考虑连接,使用 CTE,...)
- 添加索引
查看执行计划会有帮助。
2。降低查询复杂度
这些都需要吗rows/columns?
您需要在数据库端进行所有这些计算吗?
可以改为在报告中完成吗?
您可以尝试:
- 降低查询复杂度
- 将查询拆分为更小的查询
同样,查看执行计划会有帮助。
3。探索与查询本身无关的其他优化
您确实需要这个查询,但是您需要实时数据吗?
此服务器上是否正在执行许多其他查询?
您可以查看:
- 缓存
- 复制/负载平衡
Note that from SSRS 2008 R2, the new Shared DataSets can be cached. I know it doesn't apply in your case but who knows, it could help others.
4.不得已
如果上述所有步骤都无法解决问题,那么您可以增加超时时间。
Here 是一个 link 博客 post 解释不同的超时以及如何增加它们。