abhishek Asked: 2020-06-03 03:27:45 +0800 CST2020-06-03 03:27:45 +0800 CST 2020-06-03 03:27:45 +0800 CST 数据库文件存储结构中的统一范围和混合范围有什么区别? 772 我只是去了一些资源说: 统一范围由单个对象拥有,混合范围最多可以由 8 个对象共享。 但是我无法理解他们的洞察力,比如这种结构有什么好处?基本上,我是这个领域的新手,所以如果你能提供一些直观的例子和应用程序,将不胜感激。 sql-server database-internals 1 个回答 Voted Best Answer Tibor Karaszi 2020-06-03T04:15:39+08:002020-06-03T04:15:39+08:00 存储在页面上的内容、统一的和共享的范围之间没有区别。就像分配的前 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页面仍然来自共享范围。
存储在页面上的内容、统一的和共享的范围之间没有区别。就像分配的前 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页面仍然来自共享范围。