ADDS 性能优化中的 LDAP 注意事项

重要

下面是针对 Active Directory 工作负载优化服务器硬件的重要建议和注意事项的摘要,这在 Active Directory 域服务的容量规划一文中更深入地进行了介绍。 强烈建议读者查看 Active Directory 域服务的容量规划,进一步了解这些建议的技术和含义。

验证 LDAP 查询

验证 LDAP 查询是否符合创建高效查询的建议。

MSDN 上提供了大量关于如何正确编写、构建和分析查询以用于 Active Directory 的文档。 有关详细信息,请参阅创建更高效的启用 Microsoft Active Directory 的应用程序

优化 LDAP 页面大小

返回包含多个对象的结果以响应客户端请求时,域控制器必须暂时将结果集存储在内存中。 增加页面大小将导致更多的内存使用,并且可能会不必要地使缓存中的项目老化。 在这种情况下,默认设置是最佳设置。 在某些情况下,建议增加页面大小设置。 我们建议使用默认值,除非专门指出默认值不合适。

当查询具有许多结果时,可能会遇到并发执行的相似查询的限制。 之所以发生这种情况,是因为 LDAP 服务器可能会耗尽称为 Cookie 池的全局内存区域。 可能需要增加池的大小,如如何处理 LDAP 服务器 Cookie 中所述。

若要优化这些设置,请参阅 Windows Server 2008 和更新的域控制器在 LDAP 响应中仅返回 5000 个值

确定是否添加索引

在过滤器中搜索具有属性名称的对象时,索引属性非常有用。 索引可以减少计算筛选器时必须访问的对象数量。 但这会降低写操作的性能,因为当修改或添加相应的属性时,必须更新索引。 还会增加目录数据库的大小,但好处通常大于存储成本。 日志记录可用于查找开销大且效率低的查询。 确定后,请考虑对相应查询中使用的某些属性进行索引,以提高搜索性能。 有关 Active Directory 搜索工作原理的详细信息,请参阅 Active Directory 搜索的工作原理

在以下情况下,添加索引有优势

  • 请求数据时的客户端负载会产生大量的 CPU 使用率,并且无法更改或优化客户端查询行为。

  • 由于未编制索引的属性,客户端负载在服务器上生成大量磁盘 I/O,并且无法更改或优化客户端查询行为。

  • 由于缺少覆盖索引,查询需要很长时间,并且不能在客户端可接受的时间范围内完成。

  • 具有高持续时间的大量查询导致消耗 ATQ LDAP 线程并最终耗尽。 监视以下性能计数器:

    • NTDS\请求延迟–这取决于处理请求所需的时间。 Active Directory 在 120 秒后超时请求(默认),但大多数运行速度应该快得多,并且运行时间极长的查询应该隐藏在总数中。 请留意此基线中的更改,而不是绝对阈值。

      注意

      这里的较大值也可能表明了“代理”请求到其他域和 CRL 检查时出现延迟。

    • NTDS\估计的队列延迟 – 理想情况下,这应该接近 0 以获得最佳性能,因为这意味着请求没有时间等待服务。

可以使用以下一种或多种方法来检测这些场景:

索引的其他注意事项

  • 确保在优化完查询后,创建索引是解决问题的正确方法。 合适的硬件选型非常重要。 仅当当正确的修复方法是对属性进行索引,而不是试图混淆硬件问题时,才应添加索引。

  • 索引会增加数据库的大小,至少会增加被索引的属性的总大小。 因此,要评估数据库增长的估计值,可以将属性中数据的平均大小乘以将填充该属性的对象的数量。 通常,数据库大小大约增加 1%。 有关详细信息,请参阅数据存储的工作原理

  • 如果搜索行为主要在组织单位级别完成,请考虑为容器化搜索编制索引。

  • 元组索引比普通索引大,但元组索引的大小更加难以估算。 使用正常的指数规模估计值作为增长下限,最大为 20%。 有关详细信息,请参阅数据存储的工作原理

  • 如果搜索行为主要在组织单位级别完成,请考虑为容器化搜索编制索引。

  • 需要元组索引来支持中间搜索字符串和最终搜索字符串。 初始搜索字符串不需要元组索引。

    • 初始搜索字符串 – (samAccountName=MYPC*)

    • 中间搜索字符串 - (samAccountName=*MYPC*)

    • 最终搜索字符串 – (samAccountName=*MYPC$)

  • 创建索引将在生成索引时生成磁盘 I/O。 这是在优先级较低的后台线程上完成的,传入请求将优先于索引生成。 如果已正确执行环境的容量规划,则这应该是透明的。 但是,写入密集型方案或域控制器存储上的负载未知的环境可能会降低客户端体验,应在非工作时间完成。

  • 对复制流量的影响很小,因为生成索引的操作是在本地进行的。

有关详细信息,请参阅以下页:

其他参考