幾年前,我對一組非常大的列存盤索引表進行了磁區。為簡單起見,假設我有四個磁區檔案,其中根據客戶 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 歲及以上的客戶創造空間。我試著這樣做:
ALTER PARTITION SCHEME CustomerPS NEXT USED customer100plusfg
ALTER PARTITION FUNCTION [CustomerPF]() SPLIT RANGE (100)
但我收到以下錯誤:
ALTER PARTITION 陳述句的 SPLIT 子句失敗,因為磁區不為空。當表上存在列存盤索引時,只能拆分空磁區。考慮從源表上的非空磁區之一到臨時登臺表的 ALTER TABLE SWITCH 操作,然后重新嘗試 ALTER PARTITION SPLIT 操作。完成后,使用 ALTER TABLE SWITCH 將臨時表磁區移回原始源表。
我希望這樣,因為我還沒有 100 或更大的 customerID,所以我可以添加新磁區而不必自己更改列存盤表。如何為客戶 100-n 添加新磁區?是否可以在不移動“customer75plus”的所有資料的情況下執行此操作?這些磁區中有很多大型列存盤表,移動資料并不是那么可行。
uj5u.com熱心網友回復:
您使用 SPLIT 創建的新磁區包含分割點。因此,您正在嘗試創建一個新磁區 (75-100]。但該磁區 (75-MaxVal] 包含資料。
而是使用 RANGE RIGHT 磁區方案,因此當您拆分新磁區時,您可以拆分當前最大值以上的任何位置。
使用 RANGE LEFT,您必須始終在最后保留一個空磁區以進行拆分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384653.html
標籤:sql-server 数据库分区 列存储
上一篇:在作業中運行存盤程序的性能影響
