如何在一个磁盘上存储包含最新数据的分区,在另一个磁盘上存储历史数

时间:2011-05-21 13:21:18

标签: sql-server sql-server-2008 partitioning

我打算按日期对数据进行分区。

我可以每天从历史数据中分离最新数据吗?

即。我想滚动日期窗口 - 在另一个物理磁盘上说一个物理磁盘上的最新30天数据和其余的(比那个更早)。

如果日期数据在早上出现一次,我如何滚动它?

2 个答案:

答案 0 :(得分:1)

对两个磁盘进行分区并不能解决您的性能问题,因为在磁盘之间移动数据,从分区中删除数据,更新索引以及验证所有数据所涉及的劳动力都将涉及额外的IO。

您的数据是否聚集在日期列中?您声明80%的查询是过去两天的,所以如果您的数据是按日期聚类的,那么IO本质上是一个顺序读取。

过滤或分区的索引仅指向包含数据的群集或堆行,如果数据不在日期序列中,则会导致随机IO。如果您无法在日期对表进行聚类,那么按日期排序和过滤的索引(包括表的所有列)将是一个很好的性能提升。

如果您无法对表结构进行更改,并且该表未按日期聚类,我建议:

  • 将所有表数据移动到一组 磁盘。

    使用另一组磁盘作为索引 仅

  • 创建一个跨越的过滤索引 日期范围为三天。包括 表格的所有栏目
  • 创建一个跨越的过滤索引 接下来三天的日期范围。 包括表格的所有列
  • 创建一个跨越的过滤索引 接下来三天的日期范围。 包括表格的所有列
  • 创建第一天后六天 索引删除索引并创建两个 跨越日期的过滤索引 三天的范围。包括所有 表格的列
  • 重复删除并创建索引。
  • 使用SQL代理

    自动执行此过程

    使用监控索引创建 警报

证明任何改变是否会带来改善的唯一方法是获得前后的基准。

答案 1 :(得分:0)

当您定义分区架构时,绝对有可能指示该架构中每个分区所在的文件组。

当您滚动数据并需要将整个分区从一个磁盘移动到另一个磁盘时,问题就出现了 - 该操作必须小心执行,并且根据数据量可能需要一些时间。

鉴于只提到了2个物理磁盘,是什么推动了拆分的需要?