我在表上有以下分区设置。
我想创建一个从 2019-01-01 开始的新分区。
这是正确的做法吗?它现在可以运行吗,以便为 2019 年做好准备?
ALTER DATABASE mydatabase ADD FILEGROUP [Year7FileGroup]
GO
ALTER DATABASE mydatabase
ADD FILE
(NAME = N'data_year7',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\data_year73.ndf',
SIZE = 5000MB,
FILEGROWTH = 500MB)
TO FILEGROUP [Year7FileGroup]
GO
ALTER PARTITION SCHEME psYearlyPartition_Log
NEXT USED Year7FileGroup;
ALTER PARTITION FUNCTION pfYearlyPartition_Log()
SPLIT RANGE('20190101');
首先,我鼓励您阅读 Dan Guzman 关于Table Partitioning Best Practices的精彩文章。它很好地解释了原因:
现在,关于你的问题。
我有点不解为什么要为“2019-01-01”添加新分区,而您的最新分区似乎是“2016-01-01”。由于您正在尝试为“2019-01-01”添加新分区,我预计已经看到“2017-01-01”和“2018-01-01”的分区。
无论如何,当您计划使用该
SPLIT
命令时,您要考虑的主要事情是尽量减少现有分区之间的数据移动。在您可以拥有的最小值“之前”和您可以拥有的最大值“之后”预定义空分区将允许您在使用SPLIT
. 参考 Dan 的帖子:RANGE LEFT 分区函数的 SPLIT 执行的操作:
RANGE RIGHT 分区函数的 SPLIT 执行的操作:
看起来您可能正在使用
RANGE RIGHT
分区。只要您当前没有任何大于或等于“2019-01-01”的日期,就不会发生数据移动,并且SPLIT
执行速度应该非常快。您肯定希望在表中获得太多日期大于或等于该日期的数据之前定义“2019-01-01”分区。我要强调的要点是确保您已经在表中当前存在的数据之前定义了分区边界。很多时候,您可以在数据之前几年继续定义分区范围,但您应该始终监控分区表以确保您不会爬上结束边界。
在对表进行分区之前,请思考几点: 1. where 子句中是否使用了分区列。2.表的大小 3.分区键最好有整数值或时间戳。4.如果要进行日期范围分区,则永远不要用户最大。始终为将来的范围提前创建一些分区。