【问题标题】:What is the difference/relationship between extent and allocation unit?范围和分配单元之间有什么区别/关系?
【发布时间】:2012-04-16 10:58:59
【问题描述】:

您能解释一下 SQL 中“Extent”和“Allocation Unit”之间的区别或关系吗?

【问题讨论】:

  • 您可能会从here 和here 收集到一些有用的信息。

标签: sql sql-server sql-server-2008 indexing


【解决方案1】:

每个对象(无论是索引还是堆)都有多个分区(1-15k)。每个分区可以有三个不同的分配单元,即存储实际数据的 HoBT(堆或 b-tree,也称为 hobbit)。 LOB 类型的 LOB ALU 以及行溢出数据的 SLOB ALU。

页面属于某个分配单元。所有页面都属于一个范围 - 一组 8 个页面。虽然各个页面可以属于不同的分配单元,但它们始终属于统一范围内的同一个对象 - 而混合范围包含用于不同对象和可能不同分配单元的页面。

【讨论】:

    【解决方案2】:

    分配单元基本上只是一组页面。它可以很小(一页)或很大(很多很多页)。它在sys.allocation_units 中有一个元数据条目。它由IAM chain 跟踪。分配单元最常见的用途是行集的 3 个众所周知的 AU:IN_ROW_DATA、ROW_OVERFLOW 和 LOB_DATA。

    一个范围是任何 8 个连续的页面,从一个可被 8 整除的页面 ID 开始。SQL Server IO 以一种范围感知的方式执行:理想情况下一次读入整个范围,一次写出整个范围。这取决于缓冲池的当前状态,详情请参阅How It Works: Bob Dorr's SQL Server I/O Presentation。 Extents 通常是一起分配的,因此一个extent 的所有页都属于同一个分配单元。但是由于这会导致小表的过度分配,一种特殊类型的范围是所谓的“混合”范围,其中每个页面都可以属于一个单独的分配单元。详情见Inside The Storage Engine: GAM, SGAM, PFS and other allocation maps。

    因此,正如您所见,这些概念是相关的,但非常不同。也许您应该解释一下您要解决的问题是什么,或者您为什么对这些概念感兴趣,也许我们可以再详细说明。

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多