CentOS 上 SQL Server 分区策略
一 适用场景与总体原则
二 分区策略设计要点
三 落地步骤与示例脚本
-- 1) 文件组(示例:当前年/历史/未来)
ALTER DATABASE [YourDB] ADD FILEGROUP [FG_2024];
ALTER DATABASE [YourDB] ADD FILEGROUP [FG_2025];
ALTER DATABASE [YourDB] ADD FILEGROUP [FG_History];
ALTER DATABASE [YourDB] ADD FILEGROUP [FG_Future];
-- 2) 数据文件(Linux 路径示例)
ALTER DATABASE [YourDB] ADD FILE (NAME='YourDB_FG2024', FILENAME='/var/opt/mssql/data/YourDB_FG2024.ndf', SIZE=10GB, FILEGROWTH=1GB) TO FILEGROUP [FG_2024];
ALTER DATABASE [YourDB] ADD FILE (NAME='YourDB_FG2025', FILENAME='/var/opt/mssql/data/YourDB_FG2025.ndf', SIZE=10GB, FILEGROWTH=1GB) TO FILEGROUP [FG_2025];
ALTER DATABASE [YourDB] ADD FILE (NAME='YourDB_FGHist', FILENAME='/var/opt/mssql/data/YourDB_FGHist.ndf', SIZE=10GB, FILEGROWTH=1GB) TO FILEGROUP [FG_History];
ALTER DATABASE [YourDB] ADD FILE (NAME='YourDB_FGFut', FILENAME='/var/opt/mssql/data/YourDB_FGFut.ndf', SIZE=10GB, FILEGROWTH=1GB) TO FILEGROUP [FG_Future];
-- 3) 分区函数(RANGE RIGHT:边界属于右侧分区)
CREATE PARTITION FUNCTION pf_SalesDate (date)
AS RANGE RIGHT FOR VALUES
('2024-01-01','2025-01-01','2026-01-01'); -- 预留 2026 为未来分区
-- 4) 分区方案(映射到文件组,最后一个放未来分区)
CREATE PARTITION SCHEME ps_SalesDate
AS PARTITION pf_SalesDate
TO ([FG_2024], [FG_2025], [FG_History], [FG_Future]);
-- 5) 对齐索引的示例表(主键含分区键)
CREATE TABLE dbo.Sales (
SaleID bigint IDENTITY(1,1) NOT NULL,
SaleDate date NOT NULL,
Amount decimal(18,2) NOT NULL,
CustomerID int NOT NULL,
CONSTRAINT PK_Sales PRIMARY KEY CLUSTERED (SaleDate, SaleID)
) ON ps_SalesDate(SaleDate);
-- 6) 验证分区边界与分布
SELECT
$partition.pf_SalesDate(SaleDate) AS p,
COUNT(*) AS rows
FROM dbo.Sales
GROUP BY $partition.pf_SalesDate(SaleDate)
ORDER BY p;
ALTER PARTITION SCHEME ... NEXT USED [FG_Future],再 SPLIT RANGE ('2026-01-01')。四 维护与运维要点
ALTER TABLE ... SWITCH PARTITION source TO target; 快速切出历史分区;切回同理。适合按时间做滚动窗口与快速归档。ALTER INDEX IX_SaleDate ON dbo.Sales REBUILD PARTITION = 3;ALTER INDEX IX_SaleDate ON dbo.Sales REORGANIZE PARTITION = 3;UPDATE STATISTICS dbo.Sales(IX_SaleDate) WITH RESAMPLE ON PARTITIONS(3);ALTER PARTITION SCHEME ps_SalesDate NEXT USED [FG_Future];ALTER PARTITION FUNCTION pf_SalesDate() SPLIT RANGE ('2026-01-01');$partition 函数与 sys.partitions;五 常见陷阱与优化建议