sql server 索引阐述系列六 碎片查看与解决方案金沙网址

一 . dm_db_index_physical_stats 首要字段表达

  一.一 内部碎片:是avg_page_space_used_in_percent字段。是指页的填充度,为了使磁盘使用情状达到最优,对于从未过多随机插入的目录,此值应接近
十0%。 然而,对于具备多数放肆插入且页很满的目录,其页拆分数将持续充实。 那将促成越多的散装。 因而,为了收缩页拆分,此值应低于
十0%。

  1.二外部碎片:也叫逻辑碎片是avg_fragmentation_in_percent字段。是分页的逻辑顺序和概况顺序不兼容或许索引具有的庞大不一连时爆发。当对表中定义的目录实行数据修改(INSERT、UPDATE
和 DELETE 语句)的凡事经过中都会师世零星。
由于这个修改常常并不在表和目录的行中平均布满,所以每页的填充度会随时间而退换。
对于扫描表的有的或任何索引的询问,那种碎片会形成额外的页读取。
那会妨碍数据的互动扫描。

  一.三 使用查看dm_db_index_physical_stats索引碎片 (SQL server
200伍上述)。

SELECT OBJECT_NAME(sys.indexes.OBJECT_ID) AS tableName,
 sys.indexes.name,   
 page_count,
 (page_count*8.0)AS 'IndexSizeKB',
 avg_page_space_used_in_percent,
 avg_fragmentation_in_percent,
 record_count,avg_record_size_in_bytes,
index_type_desc,
fragment_count 
from sys.dm_db_index_physical_stats(db_id('dbname'),object_id('tablename'), null,null,'sampled') 
 JOIN sys.indexes  ON   sys.indexes.index_id = sys.dm_db_index_physical_stats.index_id
 AND sys.indexes.object_id = sys.dm_db_index_physical_stats.object_id

    上面还是接着上一篇查询PUB_StockCollect表下的目录

金沙网址 1

  (1)
avg_fragmentation_in_percent(外部碎片也叫逻辑碎片):最入眼的列,索引碎片百分比。
    val >1/10 and val<= 3/⑩ ————-索引重组(碎片整理)
alter index reorganize )
    val >三成 ————————–索引重建 alter index
rebulid with (online=on)
    avg_fragmentation_in_percent:大规模的碎片(当碎片大于百分之四十),可能供给索引重建
  (2) page_count:索引或数据页的总的数量。
  (3)
avg_page_space_used_in_percent(内部碎片):最关键列:页面平均使用率也叫存款和储蓄空间的平均百分比,
值越高(以十分八填充度为参考试场点) 页存款和储蓄数据就越来越多,内部碎片越少。
  (4) avg_record_size_in_bytes:平均记录大小(字节)。
  (5) index_type_desc列:索引类型-集中索引也许非集中索引等。
  (6) record_count:总记录数,约等于行数。
  (7) fragment_count: 碎片数。

二. 消除碎片方法

-------------sqlserver 2000 碎片解决--------------
-- 索引重建 充填因子80
dbcc dbreindex(PUB_StockCategory,'PK_PUB_StockCategory',80)
-- 索引重组
DBCC INDEXDEFRAG(dbname,PUB_StockCategory,'PK_PUB_StockCategory')

 

------------sqlserver 2005以上碎片解决--------
-- 重新组织表中单个索引 
 ALTER INDEX ix_pub_stock_2 ON dbo.PUB_Stock REORGANIZE  
 -- 重新组织表中的所有索引
 ALTER INDEX ALL ON dbo.PUB_Stock REORGANIZE  
 -- 重新生成表中单个索引 (重点:重建索引用)
 ALTER INDEX ix_pub_stock_2 ON dbo.PUB_Stock REBUILD
 -- 重新生成表中的所有索引 
 ALTER INDEX ALL  ON dbo.PUB_Stock  
 REBUILD  WITH(FILLFACTOR=80, SORT_IN_TEMPDB=ON ,STATISTICS_NORECOMPUTE = ON )

相关文章