1 sql-server data-pages database-internals
我刚刚去了一些资源说:
统一范围由单个对象拥有,混合范围最多可以由 8 个对象共享。
但是我无法理解他们的洞察力的含义,比如这种结构的好处是什么?基本上,我是这个领域的新手,所以如果你能提供一些直观的例子和应用程序,将不胜感激。
页面上存储的内容、统一区和共享区之间没有区别。就像分配的前 8 页(表、索引等)来自共享区一样简单。
早在 90 年代中期,当“新”架构完成时,MS 决定他们不想为每个分配浪费高达 64 kB(8 页)的空间。那时我们没有分区,如果我们也忽略 LOB 数据,我们可以将分配等同于“每个索引以及实际数据”。即,想象一个有 4 个索引的表(假设它是一个堆,但如果这对您没有任何意义,请忽略细微差别)。使用统一的扩展区,这 5 个分配(一个用于数据,每个用于索引)中的每一个都将使用至少 64 kB。即,至少 5 * 64 kB = 320 kB,即使您只有一行。
因此,他们决定前 8 页来自混合区。现在,这 5 个分配中的每一个只使用 1 个页面(而不是 1 个范围),即 40 kB 而不是本示例中的 320 kB。
岁月流逝,从 SQL Server 2016 开始,MS 决定节省这些微不足道的 kB 并没有给我们带来太多好处,因此现在 SQL Server 从一开始就分配统一的范围。即,不再有“前 8 页来自共享范围”。如果需要,您可以使用数据库选项恢复到旧行为。
但是,共享范围仍然存在。例如,IAM页面仍然来自共享区。