SSRS大数据量处理问题?

0
我现在要做一个报表显示任意时间段的交易明细,一个月至少在20W条记录以上。
预览一个月的数据时候就会显示内存溢出(OutOfMemoryException).
SQL语句已经很优化了,index seek,覆盖索引都用到了。
跪求大侠帮忙解决下?不甚感激! 
已邀请:
2

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2015-10-28 回答

你看下这个帖子 http://www.flybi.net/question/12417 如何优化SSRS报表的打开速度? 以及其他人的建议。
 
优化报表速度可以从这几个方面入手:
1. 减少数据集查询返回到报表的数量,比如返回 10W条和返回 1000 条到报表端的效果是不一样的。从源端查询的数据保存在 Dataset 数据集中,数据集中的数据实际上是保存在报表服务器中的 ReportServer / ReportServerTemp 其中一个数据库。返回的量越少,IO开销越少,速度越快。

2. 返回到数据集中的数据越大,报表的加载速度就越慢,特别是你放入了大量的KPI计算表达式计算在报表端,这个过程也非常的耗费时间。

所以通常的做法是:
1. 能在 SQL 查询完成的计算就在 SQL 查询端完成,即使这个过程比较长但是总比在报表前端通过页面表达式计算要效率更高一些。

2. 尽量控制和减少数据集的大小,返回量的大小,这样报表前端渲染的就更快一些。

3. 把 ReportServerTemp 数据库调整大一些,包括自动增长,因为大量的基于 Dataset 在报表端的汇总会在这个数据库中做聚合计算。

4. 包括 Group by 这种报表聚合表中不要通过表达式实现,而是直接取数据集中的字段列,宁愿这种计算列现在查询阶段做好。

5. 如果这种查询聚合仍然很慢,建议把这个数据集固化,即创建表先把所有计算好的数据、聚合的数据写到表中,然后这张表直接作为数据集的源,这样减少中间的计算环节。本身数据仓库的处理通常就是每天晚上执行的,完全可以把这部分的处理放到 JOB 中,先把数据计算好,报表直接引用而不是查询再聚合再计算。

6. 认真看看 ReportServer 数据库中的 ExecutionLogN (N 找最大的那个数字),里面有3个时间段分表表示查询、渲染、加载的时间,以及返回的数据量大小和条数。

通过我上面说的几个阶段的优化,你就能明显看到这几个时间段包括数据量条数的大小变化,报表的速度会明显提高。
1

- 取是能力,舍是境界 2015-10-27 回答

内存溢出和你的查询优化没有关系,是数据量的事情。
 
看下这个帖子:http://www.flybi.net/question/11534
0

gogodiy - 天善智能数据库专家、Tableau爱好者 2015-10-28 回答

说句实话,没多少人会一次性看20万条左右的明细数据,这不是报表应该完成的工作。
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2015-10-28 回答

你这20W你也一次全显示出来吗? 你们报表没有设计成分页吗
0

天善_小龙 2015-10-28 回答

如果报表需要返回这么多数据,建议预加载数据好了。report cache,

要回复问题请先登录注册