范围和分配单位之间的差异/关系是什么?

时间:2012-04-02 19:03:03

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

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

2 个答案:

答案 0 :(得分:5)

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

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

所以当你看到概念是相关的,但非常不同。也许你应该解释一下你试图解决的问题是什么,或者你为什么对这些概念感兴趣,或许我们可以详细说明。

答案 1 :(得分:2)

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

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