【问题标题】:IN SQL Server, is the sys.partitions.partition_number = sys.partition_range_values.boundary_id for the same table and partition?在 SQL Server 中,sys.partitions.partition_number = sys.partition_range_values.boundary_id 是否适用于同一个表和分区?
【发布时间】:2021-03-16 17:51:08
【问题描述】:

在 SQL Server 中有几个表用于跟踪和控制分区表。其中两个似乎具有相同含义和值但名称不同的列。

sys.partitions.partition_number 有一个列 partition_number。 sys.partition_range_values有一列boundary_id

对于给定的分区方案,这些似乎是相同的值。 FWIW,分区号也由特殊函数$PARTITION返回,如

$PARTITION.<partition function>(value)

这似乎也对应于sys.partition_range_values 表中包含匹配值的行中的boundary_id 列。

来自 Microsoft 文章的 FWIW:

boundary_id int 边界值元组的 ID(从 1 开始的序数),最左边的边界从 ID 1 开始。

partition_number int 是拥有索引或堆中从 1 开始的分区号。对于非分区表和索引,该列的值为 1。

任何人都可以确认这些表的这两列对于给定的分区函数和方案确实具有相同的值吗?

我想要一份我的搜索技能似乎无法找到的官方参考资料。

【问题讨论】:

标签: sql-server partitioning


【解决方案1】:

不,它没有。

  • sys.partition_range_values 在function_id 列上外键为sys.partition_functions,这在数据库中是唯一的。

  • 您可以通过sys.partition_schemes 将其与表连接起来,该表有一个function_id 列。这还有一个data_space_id 列,它通过sys.destination_data_spaces 与sys.data_spaces 进行多对多映射。

  • 据我所知,destination_data_spaces.destination_id 与 sys.partitions.partition_number 相同。

复杂,但如果您使用过分区函数和方案,您会看到它如何映射到它们的使用方式。

【讨论】:

  • 是的,我都很熟悉。因此,基本要点是 prv 边界与函数相关,但由于它们独立于方案(许多函数可以与一个方案一起使用),边界和分区号彼此独立变化。有意义吗?
  • 是的,我认为这是正确的。基本上表使用分区scheme,scheme使用分区function,function有boundary values,基本就是这个思路
猜你喜欢
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多