SQL Server 分区。为明年创建新分区

标签 sql sql-server sql-server-2014 partitioning

我有一个分区方案设置,目前按年份划分。我正在尝试为明年创建一个新分区:

ALTER PARTITION SCHEME psYearlyPartition_Log

    NEXT USED Year7FileGroup;

ALTER PARTITION FUNCTION pfYearlyPartition_Log()

    SPLIT RANGE('20190101');

然而,这运行了好几个小时还没有完成。有谁知道为什么会发生这种情况,因为似乎还没有任何 2019 年的数据?

最后一个分区是从 2016-01-01 到今天。

我在这篇文章的底部运行了查询,结果如下:

 CREATE PARTITION FUNCTION [pfYearlyPartition](datetime) AS RANGE LEFT FOR VALUES('2012-01-01T00:00:00','2013-01-01T00:00:00','2014-01-01T00:00:00','2015-01-01T00:00:00','2016-01-01T00:00:00');

CREATE PARTITION SCHEME [psYearlyPartition_Table1] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table2] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table3] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table4] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table5] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table6] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table7] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table8] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table9] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table10] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table11] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table12] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table13] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table14] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table15] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table16] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table17] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table18] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table19] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table20] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table21] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table22] AS PARTTITION [pfYearlyPartition] TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup],[YEAR11FileGroup]);

enter image description here

SELECT
  OBJECT_SCHEMA_NAME(pstats.object_id) AS SchemaName
  ,OBJECT_NAME(pstats.object_id) AS TableName
  ,ps.name AS PartitionSchemeName
  ,ds.name AS PartitionFilegroupName
  ,pf.name AS PartitionFunctionName
  ,CASE pf.boundary_value_on_right WHEN 0 THEN 'Range Left' ELSE 'Range Right' END AS PartitionFunctionRange
  ,CASE pf.boundary_value_on_right WHEN 0 THEN 'Upper Boundary' ELSE 'Lower Boundary' END AS PartitionBoundary
  ,prv.value AS PartitionBoundaryValue
  ,c.name AS PartitionKey
  ,CASE 
    WHEN pf.boundary_value_on_right = 0 
    THEN c.name + ' > ' + CAST(ISNULL(LAG(prv.value) OVER(PARTITION BY pstats.object_id ORDER BY pstats.object_id, pstats.partition_number), 'Infinity') AS VARCHAR(100)) + ' and ' + c.name + ' <= ' + CAST(ISNULL(prv.value, 'Infinity') AS VARCHAR(100)) 
    ELSE c.name + ' >= ' + CAST(ISNULL(prv.value, 'Infinity') AS VARCHAR(100))  + ' and ' + c.name + ' < ' + CAST(ISNULL(LEAD(prv.value) OVER(PARTITION BY pstats.object_id ORDER BY pstats.object_id, pstats.partition_number), 'Infinity') AS VARCHAR(100))
  END AS PartitionRange
  ,pstats.partition_number AS PartitionNumber
  ,pstats.row_count AS PartitionRowCount
  ,p.data_compression_desc AS DataCompression
FROM sys.dm_db_partition_stats AS pstats
INNER JOIN sys.partitions AS p ON pstats.partition_id = p.partition_id
INNER JOIN sys.destination_data_spaces AS dds ON pstats.partition_number = dds.destination_id
INNER JOIN sys.data_spaces AS ds ON dds.data_space_id = ds.data_space_id
INNER JOIN sys.partition_schemes AS ps ON dds.partition_scheme_id = ps.data_space_id
INNER JOIN sys.partition_functions AS pf ON ps.function_id = pf.function_id
INNER JOIN sys.indexes AS i ON pstats.object_id = i.object_id AND pstats.index_id = i.index_id AND dds.partition_scheme_id = i.data_space_id AND i.type <= 1 /* Heap or Clustered Index */
INNER JOIN sys.index_columns AS ic ON i.index_id = ic.index_id AND i.object_id = ic.object_id AND ic.partition_ordinal > 0
INNER JOIN sys.columns AS c ON pstats.object_id = c.object_id AND ic.column_id = c.column_id
LEFT JOIN sys.partition_range_values AS prv ON pf.function_id = prv.function_id AND pstats.partition_number = (CASE pf.boundary_value_on_right WHEN 0 THEN prv.boundary_id ELSE (prv.boundary_id+1) END)
ORDER BY TableName, PartitionNumber;

SELECT
      N'CREATE PARTITION FUNCTION ' 
    + QUOTENAME(pf.name)
    + N'(' + t.name  + N')'
    + N' AS RANGE ' 
    + CASE WHEN pf.boundary_value_on_right = 1 THEN N'RIGHT' ELSE N'LEFT' END
    + ' FOR VALUES('
    +
    (SELECT
        STUFF((SELECT
            N','
            + CASE
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN(N'char', N'varchar') 
                    THEN QUOTENAME(CAST(r.value AS nvarchar(4000)), '''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN(N'nchar', N'nvarchar') 
                    THEN N'N' + QUOTENAME(CAST(r.value AS nvarchar(4000)), '''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'date' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS date), 'yyyy-MM-dd'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'datetime' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetime), 'yyyy-MM-ddTHH:mm:ss'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN(N'datetime', N'smalldatetime') 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetime), 'yyyy-MM-ddTHH:mm:ss.fff'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'datetime2' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetime2), 'yyyy-MM-ddTHH:mm:ss.fffffff'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'datetimeoffset' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS datetimeoffset), 'yyyy-MM-dd HH:mm:ss.fffffff K'),'''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'time' 
                    THEN QUOTENAME(FORMAT(CAST(r.value AS time), 'hh\:mm\:ss\.fffffff'),'''') --'HH\:mm\:ss\.fffffff'
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') = N'uniqueidentifier' 
                    THEN QUOTENAME(CAST(r.value AS nvarchar(4000)), '''')
                  WHEN SQL_VARIANT_PROPERTY(r.value, 'BaseType') IN (N'binary', N'varbinary') 
                    THEN CONVERT(nvarchar(4000), r.value, 1)
                  ELSE CAST(r.value AS nvarchar(4000))
              END
    FROM sys.partition_range_values AS r
    WHERE pf.[function_id] = r.[function_id]
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'),1,1,N'')
    )
    + N');'
FROM sys.partition_functions pf
JOIN sys.partition_parameters AS pp ON
    pp.function_id = pf.function_id
JOIN sys.types AS t ON
    t.system_type_id = pp.system_type_id
    AND t.user_type_id = pp.user_type_id

SELECT
      N'CREATE PARTITION SCHEME ' + QUOTENAME(ps.name)
    + N' AS PARTTITION ' + QUOTENAME(pf.name)
    + N' TO ('
    +
    (SELECT
        STUFF((SELECT
            N',' + QUOTENAME(fg.name)
    FROM sys.data_spaces ds
    JOIN sys.destination_data_spaces AS dds ON dds.partition_scheme_id = ps.data_space_id
    JOIN sys.filegroups AS fg ON fg.data_space_id = dds.data_space_id
    WHERE ps.data_space_id = ds.data_space_id
    ORDER BY dds.destination_id
    FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)'),1,1,N'')
    )
    + N');'
FROM sys.partition_schemes AS ps
JOIN sys.partition_functions AS pf ON pf.function_id = ps.function_id

最佳答案

Does anyone know why this could be occurring as there doesn't seem to be any 2019 data yet?

当您拆分一个非空分区时,现有分区将拆分为 2 个独立的分区,并且行将移动到新创建的分区中以容纳新的边界。这是一个非常昂贵的操作,需要大约 4 倍于正常 DML 操作的日志记录。应避免拆分非空分区,尤其是对于像您显然拥有的大表。

为避免此类数据移动,您可以使用暂存表和临时分区函数/方案进行分区维护。这将允许您切换要拆分到暂存表的分区,使用 CREATE INDEX...WITH (DROP EXISTING=ON) 创建新分区,最后 SWITCH 分区回到主表中。

如果您需要脚本帮助来执行此操作,请将现有分区函数和方案的 CREATE DDL 添加到您的问题中。 RANGE LEFTRIGHT 等细节很重要。我猜你有一个 RANGE LEFT 函数,它将所有大于“2016-01-01”且小于或等于“2019-01-01”的行移动到新创建的分区中.

编辑

我现在看到您有几十个表,它们都使用相同的底层函数进行分区。生成的分区方案脚本中似乎有一个错误,因为它包含一个额外的文件组,这似乎是 NEXT USED 文件组,尽管它实际上并未被使用。我假设实际上没有使用 Year11FileGroup。

下面是 2 个表的示例脚本,您可以根据需要进行扩展。由于方案共享相同的功能,您需要同时对所有表执行每个步骤,因为拆分功能会影响所有方案以及使用这些方案分区的表和索引。我还为 2020 年 future 边界添加了一个边界(在 YearFileGroup7 上),这样您就可以通过设置 NEXT USED 每个方案的文件组,并按照您最初尝试的方式拆分功能。

--create temp function like original
CREATE PARTITION FUNCTION [pfYearlyPartition_temp](datetime) AS RANGE LEFT FOR VALUES('2012-01-01T00:00:00','2013-01-01T00:00:00','2014-01-01T00:00:00','2015-01-01T00:00:00','2016-01-01T00:00:00');

--create temp scheme like original for each scheme
CREATE PARTITION SCHEME [psYearlyPartition_Table1_temp] AS PARTITION pfYearlyPartition_temp TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup]);
CREATE PARTITION SCHEME [psYearlyPartition_Table2_temp] AS PARTITION pfYearlyPartition_temp TO ([YEAR1FileGroup],[YEAR2FileGroup],[YEAR3FileGroup],[YEAR4FileGroup],[YEAR5FileGroup],[YEAR6FileGroup]);

--for each table, create temporary staging table and indexes like original partitioned using temp scheme
CREATE TABLE dbo.Table1_temp(
      Col1 datetime
    , Col2 int
    , Col3 char(1000) 
) ON psYearlyPartition_Table1_temp(col1);
CREATE CLUSTERED INDEX cdx ON dbo.Table1_temp(Col2, Col1)  ON psYearlyPartition_Table1_temp(Col1);
CREATE NONCLUSTERED INDEX idx ON dbo.Table1_temp(Col2) ON psYearlyPartition_Table1_temp(Col1);
CREATE TABLE dbo.Table2_temp(
      Col1 datetime
    , Col2 int
    , Col3 char(1000) 
) ON psYearlyPartition_Table2_temp(col1);
CREATE CLUSTERED INDEX cdx ON dbo.Table2_temp(Col2, Col1)  ON psYearlyPartition_Table2_temp(Col1);
CREATE NONCLUSTERED INDEX idx ON dbo.Table2_temp(Col2) ON psYearlyPartition_Table2_temp(Col1);
GO

--for each table, switch the partition containing the new boundary (the partition to be split) into temp table
ALTER TABLE dbo.Table1
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table1_temp PARTITION $PARTITION.pfYearlyPartition_temp('2019-01-01T00:00:00');
ALTER TABLE dbo.Table2
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table2_temp PARTITION $PARTITION.pfYearlyPartition_temp('2019-01-01T00:00:00');
GO

--for each original scheme, set NEXT USED filegrroup and split original function to create new boundaries
ALTER PARTITION SCHEME psYearlyPartition_Table1 NEXT USED [Year6FileGroup];
ALTER PARTITION SCHEME psYearlyPartition_Table2 NEXT USED [Year6FileGroup];
ALTER PARTITION FUNCTION pfYearlyPartition() SPLIT RANGE('2019-01-01T00:00:00');
ALTER PARTITION SCHEME psYearlyPartition_Table1 NEXT USED [Year7FileGroup];
ALTER PARTITION SCHEME psYearlyPartition_Table2 NEXT USED [Year7FileGroup];
ALTER PARTITION FUNCTION pfYearlyPartition() SPLIT RANGE('2020-01-01T00:00:00');
GO

--for each table, repartition temp table and indexes using the original scheme which now contains the new boundaries
CREATE CLUSTERED INDEX cdx ON dbo.Table1_temp(Col2, Col1) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table1(Col1) ;
CREATE NONCLUSTERED INDEX idx ON dbo.Table1_temp(Col2) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table1(Col1);
CREATE CLUSTERED INDEX cdx ON dbo.Table2_temp(Col2, Col1) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table2(Col1) ;
CREATE NONCLUSTERED INDEX idx ON dbo.Table2_temp(Col2) WITH (DROP_EXISTING=ON) ON psYearlyPartition_Table2(Col1);
GO

--for each table, switch temp table partitions back into main table
ALTER TABLE dbo.Table1_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table1 PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00');
ALTER TABLE dbo.Table2_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00')
    TO dbo.Table2 PARTITION $PARTITION.pfYearlyPartition('2019-01-01T00:00:00');
--this partition should be empty but just in case...
ALTER TABLE dbo.Table1_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00')
    TO dbo.Table1 PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00');
ALTER TABLE dbo.Table2_temp
    SWITCH PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00')
    TO dbo.Table2 PARTITION $PARTITION.pfYearlyPartition('2020-01-01T00:00:00');
GO
--drop temp tables, schemes, and function
DROP TABLE dbo.Table1_temp;
DROP TABLE dbo.Table2_temp;
DROP PARTITION SCHEME psYearlyPartition_Table1_temp;
DROP PARTITION SCHEME psYearlyPartition_Table2_temp;
DROP PARTITION FUNCTION pfYearlyPartition_temp;
GO

下面是针对每年 100 万行的测试表运行此脚本后的结果。请注意,RANGE LEFT 函数的最后一个分区是一个永久分区,它将始终是基础方案的一部分,因此无论 YEAR6FileGroup 是否包含数据,都将始终使用它。

我建议对增量时间值使用 RANGE RIGHT 函数,因为它更直观并且可以避免这个问题。此外,请注意,对于 RANGE LEFT,与边界值完全匹配的行将最终出现在错误的分区中(例如,包含“2016-01-01T00:00:00”的行将出现在与2015年数据相同的分区),这是分区时间包含时间成分时的考虑因素。我建议你仔细阅读这个 table partitioning best practices article获取更多信息。

+------------+-----------+--------------------------+------------------------+-----------------------+------------------------+-------------------+-------------------------+--------------+------------------------------------------------------------+-----------------+-------------------+-----------------+
| SchemaName | TableName |   PartitionSchemeName    | PartitionFilegroupName | PartitionFunctionName | PartitionFunctionRange | PartitionBoundary | PartitionBoundaryValue  | PartitionKey |                       PartitionRange                       | PartitionNumber | PartitionRowCount | DataCompression |
+------------+-----------+--------------------------+------------------------+-----------------------+------------------------+-------------------+-------------------------+--------------+------------------------------------------------------------+-----------------+-------------------+-----------------+
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR1FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2012-01-01 00:00:00.000 | Col1         | Col1 > Infinity and Col1 <= Jan  1 2012 12:00AM            |               1 |                 0 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR2FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2013-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2012 12:00AM and Col1 <= Jan  1 2013 12:00AM |               2 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR3FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2014-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2013 12:00AM and Col1 <= Jan  1 2014 12:00AM |               3 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR4FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2015-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2014 12:00AM and Col1 <= Jan  1 2015 12:00AM |               4 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR5FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2016-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2015 12:00AM and Col1 <= Jan  1 2016 12:00AM |               5 |           1000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2019-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2016 12:00AM and Col1 <= Jan  1 2019 12:00AM |               6 |           3000000 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR7FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2020-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2019 12:00AM and Col1 <= Jan  1 2020 12:00AM |               7 |                 0 | NONE            |
| dbo        | Table1    | psYearlyPartition_Table1 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | NULL                    | Col1         | Col1 > Jan  1 2020 12:00AM and Col1 <= Infinity            |               8 |                 0 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR1FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2012-01-01 00:00:00.000 | Col1         | Col1 > Infinity and Col1 <= Jan  1 2012 12:00AM            |               1 |                 0 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR2FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2013-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2012 12:00AM and Col1 <= Jan  1 2013 12:00AM |               2 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR3FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2014-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2013 12:00AM and Col1 <= Jan  1 2014 12:00AM |               3 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR4FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2015-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2014 12:00AM and Col1 <= Jan  1 2015 12:00AM |               4 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR5FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2016-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2015 12:00AM and Col1 <= Jan  1 2016 12:00AM |               5 |           1000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2019-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2016 12:00AM and Col1 <= Jan  1 2019 12:00AM |               6 |           3000000 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR7FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | 2020-01-01 00:00:00.000 | Col1         | Col1 > Jan  1 2019 12:00AM and Col1 <= Jan  1 2020 12:00AM |               7 |                 0 | NONE            |
| dbo        | Table2    | psYearlyPartition_Table2 | YEAR6FileGroup         | pfYearlyPartition     | Range Left             | Upper Boundary    | NULL                    | Col1         | Col1 > Jan  1 2020 12:00AM and Col1 <= Infinity            |               8 |                 0 | NONE            |
+------------+-----------+--------------------------+------------------------+-----------------------+------------------------+-------------------+-------------------------+--------------+------------------------------------------------------------+-----------------+-------------------+-----------------+

关于SQL Server 分区。为明年创建新分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53612039/

相关文章:

sql - 在 SQL Server 中删除带有联接的表

sql-server - 将 CSV 导入 SQL Server 时无法在输入文件中找到模式

sql-server - SQL Server 2014 安装中缺少 SQL Server Integration Services

mysql - 优化查询(LEFT JOIN)

sql - 获得每日错误的百分比

php - php页面中复杂的mySQL查询

sql-server - 在 edmx 文件(支持 SQL Server 2005)上使用 ProviderManifestToken=2005 有任何副作用吗?

c# - 小巧玲珑.NET : The varchar(4000) default

sql - 查询以列出与特定表关联的作业名称和步骤

sql - 基于层次结构的透视数据