• SQL Server 2005数据文件数据的存储


    《SQL Server 2005奥秘》第5章主要研究SQL Server 2005数据文件数据的存储,本节主要介绍的是按照hobt_id获得表的第1个页面

    按照hobt_id获得表的第1个页面
    在系统视图sys.system_internals_allocation_units中,其container_id字段就代表了hobt_id的值。所以执行下列代码可以查询:

    /*定义临时变量用于表示表的对象ID*/
    declare @id int
    /*定义临时变量用于表示表的名称*/
    declare @tablename char(20)
    /*定义临时变量用于表示表的hobt_id*/
    declare @hobtid bigint
    set @tablename='t_test'
    set @id=(select object_id from DB_STUDENT.sys.objects where name=@tablename)
    set @hobtid=(select hobt_id from DB_STUDENT.sys.partitions where object_id=@id)
    select @hobtid
    select * from DB_STUDENT.sys.system_internals_allocation_units where container_id=@hobtid
    go   

    光盘代码:\代码\0511.sql。
    查询结果如图5-17所示。

    图5-17  获得表的存储页面信息

    分析查询得到的数据如下。
    1.allocation_unit_id
    这代表存储单元的ID,在数据库中唯一。但是不是对象的hobt_id。
    实例中查询到值为72057594044088320。
    2.type
    这代表分配的存储单元的类型。
    实例中为1,代表该存储单元存储的数据是行内数据。
    3.type_desc
    这代表对type的文字描述信息。
    行内数据的描述为:IN_ROW_DATA。
    4.container_id
    该字段的含义比较特殊。
    当存储的是行内数据,即type1时,该字段的值和hobt_id的值一致。两者的关系如下:
    DB_STUDENT.sys.system_internals_allocation_units.container_id= DB_STUDENT.sys.partitions.hobt_id
    5.filegroup_id
    文件组ID。
    实例的值为1,代表数据文件的文件组。因为日志文件不适用于文件组的概念,所以该项的值始终为0。
    6.total_pages
    该存储单元分配的总页面数。
    实例为2,代表该表分配了2个页面。
    7.used_pages
    实际上已经使用的页面数。
    8.data_pages
    包含下列数据的已经使用的页面数,但不包括内部索引页和分配管理页。
     行内数据
      LOB数据
     行溢出数据
    9.first_page
    代表第1个页面的数据文件ID和页面ID。
    本实例中查询到的值为0x2D0000000100。这中间就蕴含了数据文件的ID和数据页面的ID。
    10.root_page
    如果是B树存储结构,表示B树的根页面的文件和页面ID,用16进制数值来表示。
    本实例中值为0x000000000000。
    11.first_iam_page
    对于索引,是第1个索引管理页面(IAM页面)的数据文件和页面ID,用16进制数值来表示。
    本实例中值为0x4E0000000100。

    查询表上分配的页面

    可以通过DBCC EXTENTINFO命令来查看给表分配的数据页面的信息。在【Management Studio】中执行下列命令。

    dbcc traceon(3604)
    go
    dbcc extentinfo(DB_STUDENT,t_test)
    go  

    光盘代码:\代码\0512.sql。
    查询结果如图5-21所示。
    可以看到结果中有1个页面(page_id=45)属于给表分配的页面。通过DBCC EXTENTINFO命令可以判断分配给表的页面数量及页号。而通过系统视图可以查询到首页面号。
    查询结果是吻合的。

    图5-21  使用DBCC EXTENTINFO命令查看表的页面信息

    总结研究表数据存储的方法
    通过上述研究步骤,我们可以总结一些研究表数据存储的基本方法如图5-23所示。

     图5-23  研究表数据存储的方法

  • 相关阅读:
    poj 2262 筛法求素数(巧妙利用数组下标!)
    BestCoder Round #65 (ZYB's Premutation)
    BestCoder Round #65 (ZYB's Game)
    BestCoder Round #65 (ZYB's Biology)
    筛法求素数
    常见OJ提交结果对照表
    CSS3伸缩盒Flexible Box
    移动开发屏幕适配分析
    用PHP抓取页面并分析
    安装最新版本的PHPUnit后,不能使用
  • 原文地址:https://www.cnblogs.com/suinlove/p/3009103.html
Copyright © 2020-2023  润新知