如何在不改变现有数据位置的情况下添加新的 SQL 服务器分区范围以容纳未来的数据?
How do I add a new SQL Server partition range to house future data without altering the existing data locations?
几年前,我对一组非常大的列存储索引表进行了分区。为简单起见,假设我有四个分区文件,其中根据客户 ID 的范围存储数据。
CREATE PARTITION FUNCTION [CustomerPF](int) AS RANGE LEFT FOR VALUES (
N'25'
,N'50'
,N'75')
CREATE PARTITION SCHEME [CustomerPS] AS PARTITION [CustomerPF] TO (
customer0to25fg
,customer26to50fg
,customer51to75fg
,customer76plusfg
CREATE CLUSTERED COLUMNSTORE INDEX [CCI_GiantTable] ON [schema].[GiantTable] ON [CustomerPS]([CustomerId])
现在假设我想为 100 岁及以上的客户提前创建 space。我试着这样做:
ALTER PARTITION SCHEME CustomerPS NEXT USED customer100plusfg
ALTER PARTITION FUNCTION [CustomerPF]() SPLIT RANGE (100)
但我收到以下错误:
SPLIT clause of ALTER PARTITION statement failed because the partition
is not empty. Only empty partitions can be split in when a
columnstore index exists on the table. Consider an ALTER TABLE SWITCH
operation from one of the nonempty partitions on the source table to a
temporary staging table and then re-attempt the ALTER PARTITION SPLIT
operation. Once completed, use ALTER TABLE SWITCH to move the staging
table partition back to the original source table.
我希望,因为我还没有 100 或更大的 customerID,所以我可以添加一个新分区,而不必自己更改列存储表。如何为客户 100-n 添加新分区?是否可以在不移动“customer75plus”的所有数据的情况下执行此操作?这些分区中有很多大型列存储表,移动数据并不是那么可行。
您使用 SPLIT 创建的新分区包含拆分点。因此,您正在尝试创建一个新分区 (75-100)。但是分区 (75-MaxVal] 包含数据。
改为使用 RANGE RIGHT 分区方案,这样当您拆分时,新分区位于末尾,因此您可以在当前最大值以上的任何位置拆分。
使用 RANGE LEFT 时,您必须始终在要拆分的末尾保留一个空分区。
几年前,我对一组非常大的列存储索引表进行了分区。为简单起见,假设我有四个分区文件,其中根据客户 ID 的范围存储数据。
CREATE PARTITION FUNCTION [CustomerPF](int) AS RANGE LEFT FOR VALUES (
N'25'
,N'50'
,N'75')
CREATE PARTITION SCHEME [CustomerPS] AS PARTITION [CustomerPF] TO (
customer0to25fg
,customer26to50fg
,customer51to75fg
,customer76plusfg
CREATE CLUSTERED COLUMNSTORE INDEX [CCI_GiantTable] ON [schema].[GiantTable] ON [CustomerPS]([CustomerId])
现在假设我想为 100 岁及以上的客户提前创建 space。我试着这样做:
ALTER PARTITION SCHEME CustomerPS NEXT USED customer100plusfg
ALTER PARTITION FUNCTION [CustomerPF]() SPLIT RANGE (100)
但我收到以下错误:
SPLIT clause of ALTER PARTITION statement failed because the partition is not empty. Only empty partitions can be split in when a columnstore index exists on the table. Consider an ALTER TABLE SWITCH operation from one of the nonempty partitions on the source table to a temporary staging table and then re-attempt the ALTER PARTITION SPLIT operation. Once completed, use ALTER TABLE SWITCH to move the staging table partition back to the original source table.
我希望,因为我还没有 100 或更大的 customerID,所以我可以添加一个新分区,而不必自己更改列存储表。如何为客户 100-n 添加新分区?是否可以在不移动“customer75plus”的所有数据的情况下执行此操作?这些分区中有很多大型列存储表,移动数据并不是那么可行。
您使用 SPLIT 创建的新分区包含拆分点。因此,您正在尝试创建一个新分区 (75-100)。但是分区 (75-MaxVal] 包含数据。
改为使用 RANGE RIGHT 分区方案,这样当您拆分时,新分区位于末尾,因此您可以在当前最大值以上的任何位置拆分。
使用 RANGE LEFT 时,您必须始终在要拆分的末尾保留一个空分区。