本文提供了一种解决方法,用于删除包含许多转发链接的 Active Directory 对象时发生的问题。
原始 KB 数: 3149779
总结
本文讨论删除包含许多转发链接的 Active Directory 对象时发生的问题。 以下是一些常见示例:
- 组成员身份(成员属性)
- 漫游用户凭据(ms-PKI-AccountCredentials 属性)
- 只读域控制器(RODC)公开的用户链接(mds-revealedusers 属性)
开始出现问题的链接数可能低至 50,000。 在单个对象上,可能有数百万个链接。
本文中讨论的注册表项应仅适用于遇到“症状”部分中所述的问题的域控制器(DC)和轻型目录服务(LDS)服务器。 按照此处提供的建议,可以降低 Active Directory 复制性能,但可以提高正确处理此类大型对象的删除的可靠性。
现象
删除包含许多转发链接的 Active Directory 对象时,可能会遇到复制失败。 例如,删除具有大型成员身份集的组,或者降级,然后删除具有许多指向在 RODC 上公开其密码的用户帐户的链接的 RODC 计算机帐户。
以下条件是此解决方案适用于问题的关键指标:
林功能级别是 Windows Server 2003 或更高版本的 Windows Server,因此使用链接值复制。
事件 2094(复制延迟)发生多次,引用同一已删除的对象。
事件 1083 和 1955(写入冲突)在引用相同已删除对象的 2094 事件的日志记录附近记录。
受影响的域控制器(DC)也可能报告版本存储已用尽(事件 ID 623)。 在此方案中,版本存储的耗尽并不总是发生。 增加版本存储耗尽可能性的其他因素包括对 Active Directory 对象(本地和复制)以及其他长时间运行的操作(如深度查询)的更改率高。
Active Directory 复制失败,出现错误 8409、错误“发生数据库错误”或其他事件引用下表中提到的相关状态代码:
Hex Decimal 符号 友好 000020D9 8409 ERROR_DS_DATABASE_ERROR 发生数据库错误 如果启用了 Active Directory 回收站,则删除对象后,复制错误可能不会发生 60 到 180 天(已删除的对象生存期)。 当对象从已删除状态转换为回收状态时,会出现问题。
事件日志条目
出现问题时,将记录以下事件:
日志名称:目录服务
来源:Microsoft-Windows-ActiveDirectory_DomainService
事件 ID:2094
任务类别:复制
级别: 警告
关键字:经典
说明:性能警告:在对以下对象应用更改时复制延迟。 如果此消息频繁发生,则表明复制正在缓慢进行,并且服务器可能难以跟上更改。
对象 DN: <对象名称>
对象 GUID: <对象 GUID>
分区 DN:DC=contoso,DC=com
服务器:xxxx-xxxx-xxxx-xxxx-xxxxxxx._msdcs.contoso.com
已用时间 (秒): 11
用户操作
看到此延迟的一个常见原因是,此对象的大小(其值大小或值数)特别大。 应首先考虑是否可以更改应用程序,以减少存储在对象上的数据量或值数。 如果这是一个大型组或通讯组列表,则可以考虑将林功能级别提升到 Windows Server 2003 或更高版本,因为这会使复制更高效地工作。 你应该评估服务器平台是否在内存和处理能力方面提供足够的性能。 最后,可能需要考虑通过将数据库和日志移动到单独的磁盘分区来优化Active Directory 域服务数据库。
如果想要更改警告限制,则如下所示的注册表项。 值为零将禁用检查。
其他数据
警告限制(秒):10
限制注册表项:System\CurrentControlSet\Services\NTDS\Parameters\Replicator 最大等待更新对象(秒)
日志名称:目录服务
来源:Microsoft-Windows-ActiveDirectory_DomainService
事件 ID:1083
任务类别:复制
级别: 警告
关键字:经典
说明:
Active Directory 域服务无法更新以下对象,因为Active Directory 域服务正忙于处理信息,因此从以下网络地址的目录服务收到的更改。
对象: <对象名称>
网络地址:xxxxx-xxxx-xxxx-xxxx-xxxxxxx._msdcs.contoso.com
稍后将再次尝试此操作。
日志名称:目录服务
来源:Microsoft-Windows-ActiveDirectory_DomainService
事件 ID:1955
任务类别:复制
级别:信息
关键字:经典
用户:匿名登录
说明:Active Directory 域服务将复制的更改应用于以下对象时遇到写入冲突。
对象: <对象名称>
时间(秒):48
此条目前面的事件日志条目将指示是否接受更新。
写入冲突可能是由同时更改同一对象或同时更改引用此对象的属性的其他对象引起的。 当对象表示包含多个成员的大型组,并且林的功能级别设置为 Windows 2000 时,通常会发生这种情况。 此冲突触发了更新的其他重试。 如果系统看起来很慢,可能是因为发生这些更改的复制。
用户操作
对此操作使用较小的组,或将林功能级别提升到 Windows Server 2003。
详细信息
默认情况下,删除具有异常大量向前和向后链接的 Active Directory 对象时,一次删除 10,000 个链接。 在此期间,如果其他线程更新这些链接的目标对象,则链接删除事务将暂停,直到这些对象再次可用。 此挂起可能会导致整个删除事务需要很长时间才能完成。 在此期间,此长时间运行的任务会保留其他复制任务。 例如,你可能会注意到密码和组成员身份更新在整个林中未进行。
当此更新处于挂起状态时,管理员可能会看到写入冲突和事务失败事件。 此外,由于其他对象由复制处理,因此会分配越来越多的版本存储,因为挂起的大型事务在删除事务完成之前不会释放其分配的版本存储。 这可能会导致版本存储错误和复制警告事件。
注意
- 垃圾回收与处理组成员身份链接删除无关。
- 减少 TSL 不是加速链接删除的有效方法。
- 链接进程批大小的旧值在 Windows Server 2008 R2 之前的版本中为 1,000。 在更高版本中,批大小增加到 10,000,以提高启用了回收站的林中取消删除的性能。
- 检查链接进程批大小参数的值。 如果是非默认值,请将该值设置回其默认值,或者将该值设置为更小的值,例如 1,000 或 100。
较小的值通过删除每个删除的少量对象来减少版本存储使用量,从而减少执行单个删除事务的总时间。 这具有减少版本存储和写入冲突时间窗口的积极副作用,同时增加准确反映目录中组成员身份所需的时间。
Active Directory 服务检查以下注册表项。
对于 AD DS:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Links process batch size
对于 AD LDS:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<adam instance>\Parameters\Links process batch size
类型:DWORD
最小值:100
最大值:10000
此值将替代默认值 10,000 作为一次处理的原子链接数。 无需重启 NTDS 或 LDS 实例服务,也不必重启计算机以使设置生效。
每次原子操作后,都会释放相应的版本存储。 仅在下一个继续处理同一对象的原子操作期间重新获取版本存储。 你可能对大幅关闭链接批大小有第二个想法。 你可以将其与 ESE 版本存储的增加相结合。 如果由于版本存储增加的原因,你可能会决定增加版本存储,或者不减少 链接处理批大小 值这么多。
有关详细信息,请参阅以下文章:
解决方法
若要解决此问题,请设置链接进程批大小小于 10,000 的值。 这可以减少发生对象访问冲突的可能性。 这样做会使大型对象删除的复制过程更加可靠。 此外,现在完成整个事务需要较长的时间。 这也有助于避免版本存储耗尽。
数据收集
如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集 Active Directory 复制问题的信息中所述的步骤收集信息。
参考
有关详细信息,请参阅以下文章: