ad数据库ntds.dit不支持传统压缩,所谓“压缩”实为脱机碎片整理,须进入dsrm模式运行esentutl /d命令重建数据库、释放空间并优化索引,且操作前需完整备份、验证复制状态。
ad 域数据库(ntds.dit)本身不支持传统意义上的“压缩”操作,powershell 也没有直接压缩或缩小 ntds.dit 文件体积的命令。所谓“ad 数据库压缩”,在 windows server 运维中实际指的是触发并加速 active directory 的内部垃圾回收(garbage collection)与版本存储清理,从而释放被逻辑删除对象、过期版本和未提交事务长期占用的空间——这才是导致“数据库变大、日志空间耗尽、dc 响应迟缓”的根本原因。
确认是否真需“压缩”:先查滞留对象量
大量已删除但未物理清除的对象(尤其启用 AD 回收站后)会长期驻留数据库,持续膨胀版本存储区。用以下命令快速评估:
- 统计含已删对象的总数:Get-ADObject -Filter * -IncludeDeletedObjects | Measure-Object
- 对比实际业务对象数(如正常用户/计算机总数约数万),若返回值达数十万甚至百万级,说明存在严重滞留
- 检查回收站启用状态:Get-ADOptionalFeature -Filter {Name -eq "Recycle Bin Feature"},确认是否启用及保留策略
执行强制垃圾回收(GC)
这是最接近“压缩效果”的关键操作,需在目录服务还原模式(DSRM)下运行,不可逆,务必提前备份系统状态:
- 重启域控 → 启动时按 F8 → 选择“目录服务还原模式” → 登录 DSRM 账户
- 打开命令提示符(非 PowerShell),依次执行:
ntdsutil
"activate instance ntds"
"garbage collection"
quit
quit - 完成后正常重启服务器,GC 会立即清理已过期的逻辑删除对象和版本记录
配合清理策略,防止反复膨胀
单次 GC 只能治标,必须同步收紧源头:
-
缩短回收站保留期(默认360天):
Set-ADOptionalFeature -Identity "Recycle Bin Feature" -Properties @{"msDS-DeletedObjectLifetime"="129600"} # 单位秒,即36天 -
限制事件日志大小,避免 Security 日志暴增拖慢 GC:
wevtutil sl Security /ms:50MB /rt:true(同理设 Application/System) - 排查长事务源头:用 repadmin /showrepl 查复制异常;用 Process Explorer 观察高线程/句柄占用进程;禁用非必要轮询脚本或监控工具
注意:别混淆“压缩文件”和“优化 AD 数据库”
PowerShell 的 Compress-Archive 只能打包 ntds.dit 文件(如备份时 ZIP 归档),不会减小其实际占用空间,也不影响运行时性能。对正在使用的 ntds.dit 执行文件级压缩(如 NTFS 压缩)更被微软明确禁止——会导致严重 I/O 性能下降与潜在损坏。











