2012-04-02 76 views
1

你能解释一下SQL中'Extent'和'Allocation Unit'之间的区别或关系吗?范围和分配单位之间的区别/关系是什么?

+0

您可能会从[这里](http://msdn.microsoft.com/en-us/library/ms187501.aspx)和[here](http://msdn.microsoft.com/zh-CN/)收集一些有用的信息-us /库/ ms190969.aspx)。 – HABO 2012-04-02 20:07:06

回答

5

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

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

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

2

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

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

相关问题