【发布时间】:2016-09-13 12:31:29
【问题描述】:
从 2014 年 1 月到 2020 年 12 月,我每两个月对 eventdate 字段的表进行分区。这是我对表分区的整个查询:- 创建分区函数
DECLARE @DatePartitionFunction nvarchar(max) = N'CREATE PARTITION FUNCTION EventDatePartition (date) AS RANGE RIGHT FOR VALUES (';
DECLARE @i datetime2 = '20140101';
WHILE @i < '20201231'
BEGIN
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10)) + '''' + N', ';
SET @i = DATEADD(MM, 2, @i);
END
SET @DatePartitionFunction += '''' + CAST(@i as nvarchar(10))+ '''' + N');';
EXEC sp_executesql @DatePartitionFunction;
GO
创建分区架构:-
create drop partition scheme EventDatePartitioning as partition EventDatePartition ALL TO ([PRIMARY]);
最后在分区架构上创建聚集索引:-
CREATE CLUSTERED INDEX ClickStreamData_Eventdate_Partition ON ClickStreamData (Eventdate)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON EventDatePartitioning(Eventdate)
GO
之后,我检查了以下查询创建的分区:-
SELECT t.name AS TableName, i.name AS IndexName, p.partition_number, p.partition_id, i.data_space_id, f.function_id, f.type_desc, r.boundary_id, r.value AS BoundaryValue
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE t.name = 'ClickStreamData' AND i.type <= 1
ORDER BY p.partition_number;
这显示了使用边界值进行的 44 个分区。最后一个分区,即第 44 个分区的边界值是 2021-01-01。
现在,当我使用以下查询检查与分区号关联的行数时:-
SELECT * FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('ClickStreamData');
现在这个查询给我的结果在第 44 个分区之后有 6 个额外的分区,与之关联的表的行数总共没有,所有这 6 个分区的分区号为 1。
请帮我看看为什么它显示了额外的六个分区,每个分区关联的表的总行数。
【问题讨论】:
-
对不起,架构创建查询没有下降
标签: sql-server azure