以下是当前场景 - 我们在Oracle DB中有3个表(包含数百万条记录),用于生成SSRS报告。 这些报告显示复杂的数据计算,如偏差,中位数等。
现在,对于较小的日期持续时间,报告生成速度非常快,因此没有问题。 当日期范围大到一周或2-3个月时,报告需要花费大量时间来处理,并且大部分时间也会超时。
要解决此问题,我打算从SSRS中删除计算并将其移至数据库级别。我们可以在哪里预先计算出数据 这将用于SSRS报告,以便更快地生成报告。
为了做到这一点,我可以看到2个选项 -
Oracle Materialized Views
SSAS Cube
我以前从未使用过物化视图,所以我对它的性能特别怀疑FAST REFRESH问题。
您更喜欢哪种方式? MV或SSAS还是两者兼而有之?
答案 0 :(得分:2)
数据模型(SSAS)非常适合组织数据,整合业务逻辑以及定义计算在不同范围内的行为方式。它们通常比原始数据查询更快,这是您目前拥有的数据。有一些缓存涉及,但您仍然需要查询数据并等待它被处理。当您有多个报告将使用一组通用数据时,模型也是最合适的。
使用物化视图,您可以将繁重的计算时间转移到计划的刷新。可以认为它与创建由过程刷新的新表基本相同。这将极大地改善报告的查询时间,尤其是在您要过滤的日期列被编入索引时。此外,开发和维护要求远远低于模型
。因此,根据您的规格,我会建议物化视图。
答案 1 :(得分:2)
我同意物化视图(MV)方法。根据数量和类型(insert vs update vs delete)将确定快速刷新是否可行或是否可行。 与直觉相反,完全刷新通常是一种更好的方法,因为您可以更好地利用基于集合的SQL处理以及并行性来构建MV。