表分区以存档数据


13

场景:

  • 两个数据库:DB_A和DB_Archive,其中有一个非常大的表,称为tableA。
  • 每天都会将超过60天的记录从DB_A中删除,并移至DB_Archive,主要是为了使事情“分开”,因为过去两个月的记录都在DB_A上严重查询了tableA。

我想摆脱此过程,因为它速度慢且消耗大量资源。我正在考虑在date_Column上使用分区功能在DB_A上实现表分区,并在一个分区上存储所有<2个月的记录,在另一个分区上存储所有> 2个月的记录。我的问题:

  • 如果我有2个不同的数据库,这种情况的行为会如何?如果我在tableA中查询记录> getdate()-30,它将读取归档分区吗?
  • 我以为我也必须对索引进行分区,对吗?
  • 我要如何处理明天我的分区函数将“更改”的事实,我的意思是,如果今天创建该函数(7月2日,其范围将是5月2日,但是明天将是5月3日)。我可以创建动态分区功能吗?

我认为即使允许动态函数也不是一个好主意(我认为不是)...我们可以稍后详细介绍,但我认为您可能应该基于日历日期进行划分并逐步删除一次一个分区...但是这里有多种选择。
2012年

我按照去年您想做的事情编写了一个示例。这是一种特殊情况,我们希望将x天的数据保存在快速(昂贵)的阵列上,然后将存档数据移动到便宜的存储中。如果可以清理示例脚本,则将其发布,否则将只是该过程的摘要。
Mark Storey-Smith

嗨,马克,是的,请这样做,如果您也可以分享自己的经验。成功了吗?
迭戈

它可以工作,但最终是不必要的(我们采用了更简单的方法)。也许您可以进一步解释为什么您的情况存在60天的界限?将帮助每个人为您指明正确的方向。
Mark Storey-Smith

Answers:


6

使用分区时,您将不得不每天进行分区,这将以新的角度将Pre-SQL 2012限制的1000个分区置于一个新的角度,因为它只能进行3年的存档。使用SQL Server 2012,您将获得15000个分区,这足以满足每天1个分区的需要。

每天您都会添加一个新分区。如果要移动第61天的分区,可以有效地进行操作,但仍是脱机操作。请参阅有效地将分区移动到另一个文件组

您的所有索引都必须对齐,请参阅《分区索引的特殊准则》

购买分区不是一个容易决定的事情,它可能会吸引很多人...请参阅如何确定是否应该使用表分区。特别是,您不应期望分区带来性能提升。您应该通过按日期时间进行聚类来解决时间序列上的性能问题。


新的限制在2008 SP2和2008 R2 SP1中可用。blogs.msdn.com/b/hanspo/archive/2010/11/29/…–
乔恩·塞格尔

@Jon:在2008 SP2、2008R2 SP1实施中带有很大的警告 . As explained in this white paper, there are implications on certain features, including performance.。SQL 2012支持没有警告。
Remus Rusanu 2012年

感谢您指出了这一点; 确实有一些在2008/2008 R2上使用它的警告,但如有必要,它是一个可用的选项。
乔恩·塞格尔

谢谢你的评论。我将在稍后阅读材料评论
迭戈

2

我不知道分区功能是否可以是动态的,但我对此表示怀疑。您无需走那条路的一些选择:

1-在日历DATE进行分区,每天移出最早的分区

2-创建一个按日期过滤的视图,并将所有现有查询指向该视图(可以通过将基础表重命名为其他名称并为该视图命名当前表的名称来轻松地进行管理)。这也可以通过更改索引来优化。

请记住,如果您在查询中使用日期字段,则上面的第一个选项会更好地工作。如果您不这样做,它仍然会比当前过程更快,但是查询不会有很大的改进。通常,如果可以在分区字段上进行过滤,并且优化程序知道要查看哪个分区,则分区效果最好。


我想避免“每天”手动操作
迭戈

2

以下是适合您的方法:DB_A-tableA在最近60天中的每一天都具有不同的分区-stagingTable可将数据从最早的分区中移出

DB_Archive表A-存储所有超过60天的数据。(未分区)

过程:1.在一天结束之前:更改分区功能-分割范围以为新的一天添加一个新分区。(注意:您可能不希望为“今天的日期+ 1天”创建分区,例如,可以提前几步。例如:“今天的日期+ 5天”

  1. 每天结束之后,您首先将DB_A.tableA中最旧的分区切换到DB_A.stagingTable;合并最旧的分区。

  2. 将数据从DB_A.stagingTable导入到DB_Archive.tableA。最后截断DB_A.stagingTable

上面称为滚动窗口,是VLDB的一种很常见的情况。请参阅microsoft上有关分区的本白皮书:分区表和索引策略,或在“ 滑动窗口”方案中专门尝试此操作


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.