我们正在尝试按年份(2015、2016、2017、2018)对 SQL Server 表进行分区,并且我们希望再创建一个分区来始终保存当前 35 天的周期数据。
分区:Part_2015、Part_2016、Part_2017、Part_2018、Part_35Day
Create Partition Function RangePartFunction (datetime2)
as Range Right For Values ('20150101', '20160101', '20170101')
我正在努力我们如何为 2018 年和 35 天滚动期创建
谁能给点建议...
SQL Server 当前无法以声明方式指定滑动分区窗口。需要执行 T-SQL 删除旧边界并创建新边界。为此,可以每天安排一个 T-SQL 脚本(可能封装在存储过程中)。
通常最好只拆分和合并空分区,但在您的情况下这是不可能的,因为除了同一张表中的 35 天窗口分区之外,还有历史年度分区。以相对效率完成此任务的一种方法是使用相同的分区方案、函数和登台表。
SPLIT
这使您可以在 35 天窗口分区上进行操作,而无需MERGE
进行非空分区所需的过多数据移动和日志记录。下面的脚本滑动每日窗口并使用
DELETE...OUTPUT
(每天 100K 行)将数据移动到活动窗口之外。活动窗口(大约 350 万行)中的数据的繁重工作是使用CREATE INDEX...WITH(DROP_EXISTING=ON)
. 我希望它在您的 3 小时维护窗口内运行良好,最坏的情况可能是几秒钟或几分钟。这假设您的表和索引是对齐的。下面是示例 DDL。
每日分区维护脚本(见内联注释):