ntds.dit无法常规压缩,其大小取决于对象数量、属性值、链接追踪数据及未回收的已删除对象;安全有效的空间回收方式是执行离线碎片整理,需重启DC进入DSRM模式运行esentutl /d。
ad数据库文件 ntds.dit 本身不支持常规意义上的“压缩”(如zip或ntfs压缩),也不能像普通数据库那样通过命令直接优化。它的大小变化主要依赖于实际对象数量、属性值、链接追踪数据和已删除但未回收的对象。所谓“压缩与优化”,实质是通过标准维护操作释放空间、清理冗余、提升性能。
理解 ntds.dit 的物理特性
ntds.dit 是 ESE(Extensible Storage Engine)格式的只读挂载数据库,运行时由 esent.dll 管理。它在域控制器启动后被独占锁定,无法被外部工具直接读写或压缩。文件体积增长常见原因包括:
- 大量用户/计算机/组对象及其多值属性(如 memberOf、proxyAddresses)
- 启用链接追踪(Linked Value Replication, LVR)后保留的历史链接条目
- 对象删除后未触发垃圾回收(tombstone lifetime 默认180天)
- 旧版本 Windows AD 中遗留的非必要索引或未清理的日志文件(如 edb.log)
安全有效的空间回收方法
唯一被微软官方支持且安全的空间回收方式是执行 离线碎片整理(Offline Defragmentation),需重启DC进入DS Repair模式。操作前必须完成完整系统状态备份,并确保无复制延迟:
- 重启DC,启动时按F8选择“目录服务还原模式”(DSRM)
- 以DSRM管理员身份登录,打开命令提示符
- 运行:esentutl /d "C:\Windows\NTDS\ntds.dit" /t"C:\temp\tempdfrg.edb"(指定临时路径需有足够空间)
- 完成后重启为正常模式,原ntds.dit已被替换为紧凑版,日志和临时文件需手动清理
⚠️ 注意:该操作不会减少 tombstone 或已禁用对象占用的空间,仅消除内部页碎片;Windows Server 2012 R2 及以后版本中,自动在线碎片整理已大幅降低离线整理必要性。
日常可实施的轻量级优化措施
无需重启、不影响服务的持续性优化建议:
- 定期清理过期tombstone:确认所有DC复制正常后,可缩短 tombstoneLifetime(通过 ADSI Edit 修改 cn=Directory Service,cn=Windows NT,cn=Services,…),但需全林统一规划
- 禁用非必要复制属性:对不参与复制的属性(如 info、description等),在架构中设置 isMemberOfPartialAttributeSet = FALSE,减少复制负载与存储开销
- 归档或删除长期不用的测试/离职人员OU:避免累积大量空组、禁用账户及附属SID历史
- 检查并清理NTDS Settings对象上的无效站点链接:冗余链接会增加复制元数据体积
监控与容量预判建议
主动管理比事后压缩更重要。推荐常态化执行:
- 用 repadmin /showattr * "dc=xxx" /subtree /atts:"objectClass;whenChanged" /filter:"(whenChanged>=20240101000000.0Z)" 快速统计近期变更量
- 运行 dcdiag /v /test:diskfree 查看NTDS分区剩余空间及警告阈值
- 使用 eseutil /ms "C:\Windows\NTDS\ntds.dit" 查看数据库结构摘要(如可用页数、碎片率)
- 将 C:\Windows\NTDS\ 单独划分磁盘卷,预留 ≥20% 空闲空间保障ESE日志写入与临时操作










