一、碎片查看维护
dbcc showcontig('表名')
dbcc showcontig ('T_NOFITSTUDY')
结果如下:
DBCC SHOWCONTIG 正在扫描 'T_NOFITSTUDY' 表... 表: 'T_NOFITSTUDY' (2078630448);索引 ID: 1,数据库 ID: 7 已执行 TABLE 级别的扫描。 - 扫描页数................................: 1 - 扫描区数..............................: 1 - 区切换次数..............................: 0 - 每个区的平均页数........................: 1.0 - 扫描密度 [最佳计数:实际计数].......: 100.00% [1:1] - 逻辑扫描碎片 ..................: 0.00% - 区扫描碎片 ..................: 0.00% - 每页的平均可用字节数........................: 8094.0 - 平均页密度(满).....................: 0.00% DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
碎片处理的指标:
①如果逻辑扫描碎片超过20%就要对数据库进行处理
②扫描密度 [最佳计数:实际计数]如果小于80%就要对数据库进行碎片处理
③区扫描碎片超过20%
对于碎片的解决办法
基本上所有解决办法都是基于对索引的重建和整理,只是方式不同
1.删除索引并重建
这种方式并不好.在删除索引期间,索引不可用.会导致阻塞发生。而对于删除聚集索引,则会导致对应的非聚集索引重建两次(删除时重建,建立时再重建).虽然这种方法并不好,但是对于索引的整理最为有效
2.使用DROP_EXISTING语句重建索引
为了避免重建两次索引,使用DROP_EXISTING语句重建索引,因为这个语句是原子性的,不会导致非聚集索引重建两次,但同样的,这种方式也会造成阻塞
3.使用ALTER INDEX REBUILD语句重建索引
使用这个语句同样也是重建索引,但是通过动态重建索引而不需要卸载并重建索引.是优于前两种方法的,但依旧会造成阻塞。可以通过ONLINE关键字减少锁,但会造成重建时间加长.
4.使用ALTER INDEX REORGANIZE
这种方式不会重建索引,也不会生成新的页,仅仅是整理,当遇到加锁的页时跳过,所以不会造成阻塞。但同时,整理效果会差于前三种.