交换分区的最佳实践
只有当目标表或者分区是空的时滑动窗口方案才工作。例如,如果一个分区“P”属于分区表“PT”,它必须被交换出到表“T”,随后目标表“T”必须被清空。类似的,当将表“T”交换进分区表“PT”的分区“P”,目标分区“P”应当是空的。
当跨分区的数据移动被最小化时,滑动窗口方案工作最佳。下面的代码定义了分区函数和分区架构。当在这个分区架构上创建一个表时,分区表将会包括三个分区。第一个分区将会包含带有<=200401的键值的数据;第二个带有>200401 且 <=200403的键值;第三个带有>200403的键值。
|
当使用ALTER PARTITION函数的分割功能添加一个值为200402的新分界时,行会在相应的分区间移动。
|
通过在原始的位置删除行以及在新的位置添加行,行可以在分区间移动。和此次交换有关的分区在这一期间是不可访问的。在这个例子中,新建的第二个分区将会拥有在键值范围>200401 且 <=200402内的数据。带有对应键值的数据被从第二个分区中删除并且插入到新的分区。新的分区(>200401 且 <=200402)以及第三个分区(>200402 且 <=200403)在这一期间是无法访问的。
在我们的消费者场景中,新的数据是通过在活动的结尾处分割分区函数来添加的。老的数据是通过在老化的结尾处合并分区函数来删除的。这种实现滑动窗口的方式消除了在交换进和交换出分区时的跨分区的数据移动,也就是说,新的数据被批量的导入到一个表中并且随后通过在活动的结尾处分割它来交换进分区表,具体如下所示:
|
对于更多的信息,请参阅在SQL Server联机丛书中的“设计分区来管理数据子集”
将数据存储到一个性价比高I/O子系统的技术
一个滑动窗口的具体实现可以通过将老化的数据滑动到一个性价比高的I/O子系统中来进行扩展。例如,在我们的测试场景中,我们将老化的数据从一个高性能的I/O子系统滑出到了一个没有同等高的性能但较为经济的I/O子系统中。特殊的滑动窗口实现可能无法通过在SQL Server中的备份与还原操作来完成。有一些替换的方式可以实现这样一个策略:
◆如果源文件是可用的,将数据导入到位于性价比高的I/O子系统的其它表中。重建索引。删除老的分区并且将新近导入的表添加到分区表中。无论你的数据集的大小,down机时间将会是交换分区所需要的时间,可以忽略不计。
◆如果导入的过程中包含了转换,在性价比高的I/O子系统上,通过使用一个SELECT/INTO查询从老化的分区提取数据来创建新表并重建索引应当更为有效。down机时间将会是交换分区所需要的时间。
关系型数据仓库的分区策略
接下来的部份阐述了对你的关系型数据仓库进行分区的两个主要策略。该部份将会讨论这些策略是如何作用于影响分区的要素的。
策略 I – 将一个分区绑定到它自己的文件组
一个分区可以使用以下的步骤被逻辑的绑定到一个文件组:
◆创建带有多个文件组的数据库,每一个文件组将会逻辑的对应一个分区
◆每个文件组中有一个文件。文件组可以包含一个或多个物理文件,并且这些文件可以在一个或多个逻辑卷/物理磁盘上创建
◆创建分区函数并将分界点映射到相应的文件组,使用分区架构来创建一个在文件组和分区之间的一一对应的关系
关于如何基于这个策略来实现分区的示例代码请参阅附录D
图表3:将分区映射到其自身的文件组
策略Strategy II – 将两个或更多分区绑定到同样的文件组
第二个策略是将一个或者多个分区映射到同样的文件组。文件组可以由一个(或者多个)分布在跨越一个(或者多个)逻辑卷/物理磁盘的物理文件来组成。对于基于这个策略实现分区的示例代码,请参阅附录D
图表4:将两个或更多的分区映射到同一个文件组
| 共9页: 上一页 [1] [2] [3] [4] 5 [6] [7] [8] [9] 下一页 | ||
|