---sys.objects在数据库中创建的每个用户定义的架构作用域内的对象在该表中均对应一行 SELECT * FROM sys.objects WHERE name = 'Stor_PackKind_Stock_Day' --表逻辑上分配在一个容器(也叫做“分区”),以下查询输出表对象的分区信息: --Object_id : 表对象标识 --Partition_id : 表对象的分区标识 --Hobt_id : 存储数据的heap或B树的标识 --提示:一张表有一个或多个分区,每一个分区最大有3种分区单元 SELECT * FROM sys.partitions WHERE object_name(object_id) = 'Stor_PackKind_Stock_Day' --当表创建时,默认其所有页面分配在一个分区(分区是组织数据的单位),添加了非聚集索引,分区框架和与其相关的索引页面逻辑上分配到各自的分区。 --基于存储的数据,一个分区有3种类型的页组面:IN_ROW_DATA页,ROW_OVERFLOW_DATA页和LOB_DATA页,这些页组也称为“分配单位”。 --以下是它们的区别: --1. IN_ROW_DATA (默认) : 若一个表设计简单(即行记录小于8000字节,不存在LOB数据类型),页中存储的所有数据以IN_ROW_DATA标记。 --2. ROW_OVERFLOW_DATA :若表中包含3个varchar(4000)的数据类型,当插入大于8000字节的记录时,其数据将移动到ROW_OVERFLOW_DATA页。 --3. LOB_DATA : LOB数据不与数据页一起存储,LOB数据存储在LOB_DATA的特殊页,数据页包含16字节的指针用于查找LOB_DATA页面。 --container_id --与分配单元关联的存储容器的 ID。 --如果 type = 1 或 3,则 container_id = sys.partitions.hobt_id。 --如果 type 为 2,则 container_id = sys.partitions.partition_id。 --0 = 标记为要延迟删除的分配单元 ---sys.allocation_units 数据库中的每个分配单元都在表中占一行。 SELECT Uit.* FROM sys.allocation_units AS Uit,sys.partitions AS Prt WHERE Uit.container_id = Prt.hobt_id----type = 1 或 3,则 container_id = sys.partitions.hobt_id。 type 为 2,则 container_id = sys.partitions.partition_id。 AND object_name(Prt.object_id) = 'Stor_PackKind_Stock_Day' --当从磁盘读取数据页时,该数据页被复制到 SQL Server 缓冲池并被缓存以供重复使用。 --每个缓存的数据页都有一个缓冲描述符。 缓冲描述符唯一地标识 SQL Server 实例中当前缓存的每个数据页。 -- sys.dm_os_buffer_descriptors 返回所有用户数据库和系统数据库的缓存页 SELECT Buf.* FROM sys.dm_os_buffer_descriptors AS Buf,sys.allocation_units AS Uit,sys.partitions AS Prt WHERE Buf.allocation_unit_id =Uit.allocation_unit_id AND Uit.container_id = Prt.hobt_id----type = 1 或 3,则 container_id = sys.partitions.hobt_id。 type 为 2,则 container_id = sys.partitions.partition_id。 AND object_name(Prt.object_id) = 'Stor_PackKind_Stock_Day'

posted on
浙公网安备 33010602011771号