大表的性能调优 (SQL Server 2008 R2)

use*_*862 14 sql-server-2008-r2

背景:
我在 UAT 阶段有一个事实表。目标是在 Prod 中加载 5 年的数据(预期大小为 4 亿条记录)。目前它只有 2 年的测试数据。

表特点:

  1. 尺寸数 ~ 45
  2. 措施 ~ 30
  3. 非相加措施等栏目~ 25
  4. 当前数据大小 ~ 2 亿(2 年数据)
  5. 时间视图:3 种不同的月视图:财政/日历/调整后(即,同一行可以根据正在寻找的视图出现在不同的月份)
  6. 用户一次只需要一个视图。(即查询中只会使用一个 Month Column,这会阻止我们对时间视图进行分区)
  7. 索引:自然键上的 1 个聚集索引(8 列)。创建了 3 个覆盖非聚集索引,每个月列一个,包括少数维度 SK(FK)和所有度量)。
  8. 因此,索引很大(总共 190 GB)。
  9. 空间不受限制(已分配 1 TB)
  10. 服务器中可用的 64 GB RAM。
  11. 表压缩也做了。

要求:
在这个事实表上的查询应该在 30 秒内给出结果(一般查询选择 sum(measure) 通过 Dim 值加入几个 Dims 组)。报告直接在此事实表的顶部完成。

问题:
任何包含索引中可用列的查询都可以正常工作,但是如果我们包含不在包含中的任何其他列......它很糟糕。需要5-10分钟以上。任何人都可以建议一些解决方案,它适用于我们选择的任何维度/列。在这种情况下,索引视图可以提供帮助吗?

Rem*_*anu 6

升级到 SQL Server 2012 并使用列存储。他们在这些要求中茁壮成长。说真的,下载评估版并尝试一下。删除所有索引,删除聚集索引,只需在所有列上添加一个非聚集列存储索引并试一试。我见过像你这样的案例,将执行时间减少到 2-3 秒,主要是因为段消除开始了。一些补充内容:


Nic*_*aid 0

索引视图可以解决您的问题吗?数据需要有多新?您可以为一些排列创建索引视图。但由于尺寸和尺寸如此之多,您可能很快就会耗尽空间!

使用SSD怎么样?