Azure DevOps Services
服务之间的工具和集成提高了 Azure DevOps Services 的效率。 如果不小心,自动化工具可能会失控并发送大量请求。 这些请求可能导致 Azure DevOps 对组织强制实施 速率限制 。 为了帮助降低达到速率限制的风险,请在使用 REST API 与 Azure DevOps 集成时遵循这些最佳做法。
仅推送可执行的工作事项
只将团队计划将来参与或解决的可执行项推送到 Azure DevOps 中。 除非必要,否则不要将工作项放入 Azure DevOps。 例如,不要尝试在 Azure DevOps 中存储遥测数据。
维护自己的数据存储
不要将工作项添加到 Azure DevOps 中,以便将它们全部放在一个位置。 Azure DevOps Services 不设计为数据存储服务。 维护自己的数据存储。
对更改进行批处理
执行单个作速度缓慢且成本高昂,这是导致性能问题和速率限制的主要原因。 将更改批处理到单个调用中。 有关详细信息,请参阅我们的 批处理文档 和 示例代码。
限制你的修订
单个工作项上的许多修订都会造成膨胀并导致性能问题。 建议执行以下任务:
- 通过批处理字段更改来减少更新。 不要一次只更新一个字段。
- 如果对多个工作项进行了更改,请将这些更改批处理为单个作。
- 将修订数保持在最低水平,以避免修订限制。
注释
对于通过 REST API 进行的更新,工作项修订限制为 10,000。 此限制限制来自 REST API 的更新,但 Web 门户中的更新不会受到影响。
优化查询
优化查询以返回少量结果。 复杂的条件和筛选器可能会导致查询长时间运行。 将查询执行时间保持在 30 秒以下,以避免阈值失败。
查询性能提示
- 尽可能将日期或范围限制子句放置在查询顶部附近。
- 减少使用
Ever
运算符的子句数。 - 减少使用
Contains
运算符的子句数,标记除外。- 如果可用,请使用
Contains Words
运算符。 - 不要在
Contains
长文本字段上使用运算符,因为它很昂贵。
- 如果可用,请使用
- 尽可能避免使用
<>
和Not
运算符。 - 避免将
In Group
运算符用于大型组。 - 尽量减少
Or
运算符的数量,并确保在使用之前仍具有顶级作用域。 - 避免在
OR
运算符和区域或迭代路径之间使用In Group
子句。 - 尽可能减少实现目标所需的总体子句数。
- 避免尽可能对核心字段以外的任何其他内容(如
ID
)进行排序。 - 如果要对自定义字段进行排序,请在筛选器中使用自定义字段。
- 如果可能,请指定项目。 否则,查询的范围限定为整个集合,并且可能需要比它所需的时间长得多。 取消选中查询编辑器右上角的在项目之间查询。
在项目间查询
- 指定查询需要跨项目搜索时要查找的项目。
- 尽可能使用 标记 而不是 关键字 ,除非搜索字符串的部分文本。
妥善处理故障
当资源限制或利用率频率超过限制阈值时,更新和查询会失败。 例如,运行时间超过 30 秒的查询返回以下错误:
VS402335: The timeout period (30 seconds) elapsed prior to completion of the query or the server is not responding.
使用 REST API 时,请确保设计代码以适当处理故障。
限制链接
尽可能限制每个工作项的链接数,以避免强制实施链接限制。
重要
我们计划很快强制实施工作项修订和链接限制。 这些限制由性能监视和客户反馈决定。
不要使用查询生成报表
使用查询和单个获取工作项调用是对组织执行速率限制的首要方法。 不要执行查询以返回大型工作项列表。 请改用报告工作项链接和工作项修订 REST API。
有关详细信息,请参阅 GitHub 上的 C# 示例。