【问题标题】:Table Partitioning in Sql server 2012 sql AzureSql server 2012 sql Azure 中的表分区
【发布时间】: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


【解决方案1】:

我将滚动我的 8 球并在黑暗中开枪:您在对象 ClickStreamData 上有未对齐的未分区的非聚集索引。 Non-partitioned indexes count as one partition:

如果堆或索引没有分区,则由一个分区组成(分区号=1);

关于非对齐索引的强制警告Special Guidelines for Partitioned Indexes

内存限制会影响 SQL Server 构建分区索引的性能或能力。当索引未与其基表对齐或未与其聚集索引对齐时尤其如此,如果该表已经应用了聚集索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多