通过函数 sys.dm_db_index_physical_stats
(db_id('wcc'), --数据库id
null, --对象id:数据库名称.架构.对象名称
null, --索引id
null, --分区号
'' --模式
)
可以查看索引碎片的具体情况。
所有的参数都是以当前数据库来计算的,所以必须指定完全限定。
模式影响如何收集碎片数据:
1、LIMITED:扫描堆所有的页,对于索引,只扫描叶级别上面的父级别页
2、SAMPLED:收集堆或索引中1%采样率的数据
3、DETAILED:扫描所有页,最精确但速度最慢
定null或default时,等同于limited模式。
代码如下:
select
DB_NAME(d.database_id),
OBJECT_NAME(d.object_id),
i.name, --索引名称
d.index_type_desc,
d.alloc_unit_type_desc,
d.index_depth, --索引的深度
d.index_level, --索引当前级别
--索引的逻辑碎片,或 IN_ROW_DATA 分配单元中堆的区碎片
d.avg_fragmentation_in_percent,
--IN_ROW_DATA分配单元的叶级别中的碎片数
d.fragment_count,
--IN_ROW_DATA 分配单元的叶级别中的一个碎片的平均页数
d.avg_fragment_size_in_pages,
--对于索引,平均百分比应用于 IN_ROW_DATA 分配单元中 b 树的当前级别
--对于堆,表示 IN_ROW_DATA 分配单元中所有数据页的平均百分比
d.avg_page_space_used_in_percent,
d.page_count, --索引或数据页的总数
d.record_count, --总记录数
d.min_record_size_in_bytes, --最小记录大小(字节)
d.max_record_size_in_bytes, --最大记录大小(字节)
d.avg_record_size_in_bytes, --平均记录大小(字节)
--压缩页的数目
d.compressed_page_count,
--分配单元中将被虚影清除任务删除的虚影记录数
d.ghost_record_count,
--由分配单元中未完成的快照隔离事务保留的虚影记录数
d.version_ghost_record_count,
--堆中具有指向另一个数据位置的转向指针的记录数
d.forwarded_record_count
from sys.dm_db_index_physical_stats
(db_id('wcc'), --数据库id
null, --对象id:数据库名称.架构.对象名称
null, --索引id
null, --分区号
'' --模式
)d
inner join sys.indexes i
on d.object_id = i.object_id
and d.index_id = i.index_id