SQL Server如何知道在特定范围内分配了哪个磁盘集群?

时间:2017-10-25 07:03:39

标签: sql-server sql-server-2012 sql-server-2008-r2 database-administration sqlstorage

假设我们有一个具有唯一聚簇索引的表。我们使用索引键值查询该表中的行。 SQL Server将使用索引查找来查找相关的数据页。

但是,在使用file_id后,SQL Server如何从物理磁盘读取这些数据页:page_id?它如何知道磁盘扇区/集群的位置?

1 个答案:

答案 0 :(得分:0)

SQL Server不处理磁盘扇区/群集。 它从files读取,逻辑上划分为pages(8Kb)。 Extent连续8页。

每个表都有IAM个与之关联的页面,其中列出了分配给该表的所有扩展区(它是一个位图页面,其中1表示扩展区分配给该对象,0表示它是不是)。

SQL Server维护指向第一个IAM页面的内部指针 堆的第一个数据页。可以在系统视图sys.system_internals_allocation_units中找到这些指针。

在聚集索引的情况下,所有数据都像往常一样存在于页面中,并且仍然可以使用IAM页面读取,但也可以在" ordered"使用binary tree作为索引的方式。

这意味着在数据(索引叶子页面)服务器上构建了另外的搜索结构(也包含页面),根页面会指示您在聚簇索引键的基础上降低索引级别。

结论:索引页面中显示的所有地址都包含file_id:page_id,而不是群集/扇区。

您可以在此处找到数据库结构的组织方式:

Inside Microsoft SQL Server 2008 T-SQL Querying