常见问题 SQL Server碎片性能
数据库碎片化严重、速度变慢怎么处理
碎片化的判断方法、物理碎片对扫描性能的影响,以及整理与重建的适用场景和代价。
发布于 2026/11/11
所属频道 SQL Server
简短答案
碎片化(物理碎片 + 逻辑碎片)让顺序 IO 变成随机 IO,扫描类查询变慢。先量化碎片程度,再选「整理(REORGANIZE,在线、轻量)」或「重建(REBUILD,更彻底、锁更多)」,并回头查碎片反复出现的原因。
排查步骤
- 量化碎片:
SELECT index_id, avg_fragmentation_in_percent, avg_fragment_size_in_pages
FROM sys.dm_db_index_physical_stats(DB_ID(), 表对象ID, NULL, NULL, NULL)
WHERE avg_fragmentation_in_percent > 5;
- 按程度选策略(经验阈值,非硬性):
| 平均碎片率 | 处理 |
|---|---|
| < 10% | 一般不动 |
| 10%–30% | ALTER INDEX ALL ON 表 REORGANIZE; |
| > 30% 或大量页碎 | ALTER INDEX 索引 ON 表 REBUILD; |
- 在 SSMS 中:表 → 索引 → 右键 → 组织,向导里有同样的阈值指引。
- 碎片反复出现的主因:高频增删、自动增长过频(小步数多轮)、大事务批量装载。改自动增长步长为较大 MB 值,能显著减少碎片增速。
- 各版本索引维护特性以 SQL Server 2022 Developer 与 SQL Server 2025 Developer 条目页核对,维护任务可放进维护计划。
操作小结
- 先看
avg_fragmentation_in_percent,别凭感觉重建。 - REORGANIZE 在线代价小,REBUILD 更彻底。
- 治本在减少碎片产生(增长步数、批量操作),整理只是定期维护。