数据存储的基本单元是Page,每个Page是8KB,数据文件(mdf和ndf)占用的硬盘空间,逻辑上按照PageNumber进行划分,也就是说,可以把数据文件看作是PageNumber 从0到n的连续Page。硬盘IO的基本单元是Page,这意味着,SQL Server对整个Page执行读写操作。一个Page只属于一个对象(表或index),不会出现一个Page属于两个对象的情况。

每8个物理地址连续的Page构成一个区(Extent),区是空间分配和管理的基本单元,数据库把文件按照区(Extent)进行分配,也就是说,数据库文件的大小的区的倍数。

一,非正式的DBCC IND命令

DBCC IND是一个非正式的命令,用于定位到表或索引使用的Page,该命令的语法结构是:

DBCC IND ( ['database name'|database id], table_name,index_id)

参数index_id的有效值是:

  • 1:表示表的聚集索引
  • 非聚集索引的index_id
  • 0:代表堆(没有创建聚集索引的表)
  • -1:表示跟表相关的所有类型的Page(in row data, row over flow data, IAM, all indexes)
  • -2:只显示IAM类型的Page

该命令返回的结果如下所示:

结果集中各个字段的含义:

  • PageFID — the file ID of the page
  • PagePID — the page number in the file
  • IAMFID — the file ID of the IAM page that maps this page (this will be NULL for IAM pages themselves as they’re not self-referential)
  • IAMPID — the page number in the file of the IAM page that maps this page
  • ObjectID — the ID of the object this page is part of
  • IndexID — the ID of the index this page is part of
  • PartitionNumber — the partition number (as defined by the partitioning scheme for the index) of the partition this page is part of
  • PartitionID — the internal ID of the partition this page is part of
  • iam_chain_type — see IAM chains and allocation units in SQL Server 2005
  • PageType — the page type. Some common ones are:
    • 1 – data page
    • 2 – index page
    • 3 and 4 – text pages
    • 8 – GAM page
    • 9 – SGAM page
    • 10 – IAM    page
    • 11 – PFS page
  • IndexLevel — what level the page is at in the index (if at all). Remember that index levels go from 0 at the leaf to N at the root page
  • NextPageFID and NextPagePID — the page ID of the next page in the doubly-linked list of pages at this level of the index
  • PrevPageFID and PrevPagePID — the page ID of the previous page in the doubly-linked list of pages at this   level of the index

二,系统管理函数 sys.dm_db_database_page_allocations

该DMF用于返回跟表或索引相关的所有Page,可以用于调查索引的结构(调查索引是如何创建的),研究损坏的页面(查看损坏页面的前一个Page和后一个Page),调查空间的利用情况(查看为表分配的Page类型)。
sys.dm_db_database_page_allocations (@DatabaseId , @TableId , @IndexId , @PartionID , @Mode)

对于@IndexId 和 @PartitionID,如果传递NULL值,表示返回所有索引或分区的信息。

参数 @Mode 是定义返回数据的模式,有效值是:DETAILED 和 LIMITED。
  • LIMITED:   表示只返回Page的元数据
  • DETAILED :表示返回Page的详细数据
该DMF为每一个Page返回一行,每一行都表示表或索引占用的一个Page:
  • partition_id:对应于分区的Partition Number
  • rowset_id:对应于分区的PartitionID
  • allocation_unit_id:分区单元(allocation unit)的ID
  • allocation_unit_type、allocation_unit_type_desc:分区单元的类型
  • extent_file_id:extent所在的file_id
  • extent_page_id:extent包含的page_id
  • allocated_page_iam_file_id:跟Page相关联的IAM Page所在的file_id
  • allocated_page_iam_page_id:跟Page相关联的IAM Page所在的page_id
  • allocated_page_file_id:Page的file_id
  • allocated_page_page_id:Page的page_id
  • is_allocated:指示该Page是否已分配
  • is_iam_page:指示该Page是否是IAM Page
  • is_mixed_page_allocation:指示该Page是否位于混合区
  • page_free_space_percent:该Page中空闲空间的占比
  • page_type、page_type_desc:该Page的类型
  • page_level:该Page在索引结构中的Level,叶子节点的Level是0。
  • next_page_file_id:下一个Page的file_id
  • next_page_page_id:下一个Page的page_id
  • previous_page_file_id:前一个Page的file_id
  • previous_page_page_id:前一个Page的page_id
  • is_page_compressed:指示该Page是否被压缩
  • has_ghost_records:指示该Page是否由幽灵记录(ghost record)
 
 
 
参考文档:
 

定位表和索引使用的Page的更多相关文章

  1. Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  2. PE格式第七讲,重定位表

    PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...

  3. MySQL InnoDB表和索引之聚簇索引与第二索引

    MySQL InnoDB表和索引之聚簇索引与第二索引 By:授客QQ:1033553122 每个InnoDB表都有一个称之为聚簇索引(clustered index)的特殊索引,存储记录行数据.通常, ...

  4. SQL Server 内存优化表的索引设计

    测试的版本:SQL Server 2017 内存优化表上可以创建哈希索引(Hash Index)和内存优化非聚集(NONCLUSTERED)索引,这两种类型的索引也是内存优化的,称作内存优化索引,和基 ...

  5. ORACLE表、索引和分区详解

    ORACLE表.索引和分区 一.数据库表 每种类型的表都有不同的特性,分别应用与不同的领域 堆组织表 聚簇表(共三种) 索引组织表 嵌套表 临时表 外部表和对象表 1.行迁移 建表过程中可以指定以下两 ...

  6. Reverse Core 第二部分 - 16&17章 - 基址重定位表&.reloc节区

    第16-17章 - 基址重定位表&.reloc节区 @date: 2016/11/31 @author: dlive 0x00 前言 这几天忙着挖邮箱漏洞,吃火锅,马上要被关禁闭,看书进度比较 ...

  7. Lucene学习之一:使用lucene为数据库表创建索引,并按关键字查询

    最近项目中要用到模糊查询,开始研究lucene,期间走了好多弯路,总算实现了一个简单的demo. 使用的lucene jar包是3.6版本. 一:建立数据库表,并加上测试数据.数据库表:UserInf ...

  8. Sybase数据库收集表及其索引的统计信息

    更新表及其索引的统计信息: update table statistics 表名 go update index statistics 表名 go 建议此操作在闲时操作.

  9. Oracle表与索引的分析及索引重建

    1.分析表与索引(analyze 不会重建索引)   analyze table tablename compute statistics 等同于 analyze table tablename co ...

随机推荐

  1. 数组类的创建——StaticArray.h

    创建好的基于顺序存储结构的线性表存在两个方面的问题:1)功能上的问题:数组操作符的重载带来的问题,有可能线性表被无用为数组了,线性表被当做数组来使用了.2)效率方面的问题 本篇博客就要解决功能上的问题 ...

  2. 关于input标签不同type下的盒模型

    刚才发现,在Chrome下input标签的不同type类型所取的盒模型是不一样的.浪费了我很多时间去调试,唉. type="text"时,给它设置宽度width:300px,此时的 ...

  3. java之四种权限修饰符

    java权限修饰符piublic.protected.private.置于类的成员定义前,用来限定对象对该类成员的访问权限. 修饰符 类内部 同一个包 子类 任何地方 private yes     ...

  4. C++入门到理解阶段二基础篇(7)——C++函数

    目录 函数作用 函数定义 函数声明 函数调用 函数值传递 函数常见的样式 函数的分文件书写 函数作用 将经常使用的代码封装起来,减少重复代码 函数定义 C++ 中的函数定义的一般形式如下: retur ...

  5. go语言之数据类型和格式化输出

    1.数据类型 package main import ( "fmt" "reflect" ) func main() { //整形 var v1 int32 v ...

  6. ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解

    在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...

  7. C#_.NetFramework_Web项目_EXCEL数据导入

    [推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出] 需要引用NPOI的Nuget包:NPOI-v2.4.1 B-1:EXCEL数据导入--C#获 ...

  8. Git - Git本地仓库与GitHub远程仓库关联

    前言 Git本地仓库与GitHub仓库的关联逻辑如下 创建Key 在本地仓库下,新建Key文件夹,然后打开Key文件夹,单击鼠标右键,选择Git Bash Here. 输入命令:ssh-keygen ...

  9. mysql注入新姿势(数字与字符编码注入) hex,conv

    0x01 前言 今天看到师傅们发的一篇文章,感觉mysql注入还能这么用,于是自己搭建了一个简单的环境,进行复现. 0x02原理 首先介绍两个mysql函数 hex和conv conv(N,from_ ...

  10. [iOS开发]关于cocoapods的使用

    CocoaPods的使用 关于CocoaPods,相信做iOS开发的应该都比较熟悉了.Cocoapods是一个用来管理第三方库的比较好用的管理工具.关于Cocoapods的东西不再多说,接下来进入正题 ...