SQL Server 2017 中的范围分配机制

Dev*_*ava 1 sql-server documentation database-internals

我正在查看页面和范围分配的 SQL Server 2017 文档。

我从在线资源和 SQL 会议的会议中了解到:从 SQL Server 2016 开始,统一范围分配是默认行为。但是,MS文档描述的是:

为了提高空间分配效率,SQL Server 不会将整个区分配给具有少量数据的表。

  • 统一范围由单个对象拥有;盘区中的所有八页只能由拥有对象使用。
  • 混合区最多由八个对象共享。范围中的八个页面中的每一个都可以由不同的对象拥有。

新表或索引通常从混合区分配页。当表或索引增长到它有八页时,它就会切换到使用统一区进行后续分配

所以,我的问题是:在 SQL Server 2016 及更高版本中,如果我们创建新表或索引,最初会分配统一范围还是混合范围?

Sea*_*ser 8

在 SQL Server 2016 及更高版本中,如果我们创建新表或索引,最初会分配统一范围还是混合范围?

如果数据库是在 SQL Server 2016+ 中创建的,那么默认情况下,统一扩展区分配默认处于启用状态,因此即使只需要一个页面,也会分配一个统一扩展区(扩展区是从数据库页面 0 开始的 8 个连续页面)。

但是,如果数据库是在旧版本 <= SQL Server 2014 中创建的,则默认情况下统一范围分配数据库设置不存在,因此使用共享范围中的单个页面。在 <= 2014 中,有一个跟踪标志会覆盖此 TF1118 设置,但它适用于整个实例,而不仅仅是单个数据库。SQL Server 2016 去掉了跟踪标志(它不是 NOP),并将每个数据库的设置设为默认值 ON。