【问题标题】:Troubleshooting Azure Search poor performance排查 Azure 搜索性能不佳的问题
【发布时间】:2016-05-02 18:48:10
【问题描述】:

我发现 Azure Search Basic 实例的性能不稳定。我们的索引只有 1,544 个文档,大小为 28MB,所以我希望搜索速度非常快。

Azure Application Insights 报告在过去 12 小时内从我们的应用程序调用了 4.7K 次 Azure 搜索,平均响应时间为 2.1 秒,标准偏差为 35.8 秒(!)。

我个人在手动测试期间发现性能不稳定。一次查询可能需要 20 多秒,然后再过一会儿,同样的查询将需要不到 100 毫秒。

查询非常简单。这是一个示例查询字符串:

api-version=2015-02-28&api-key=removed&search=&%24count=true&%24top=10&%24skip=0&searchMode=all&scoringProfile=FieldBoost&%24orderby=sortableTitle

我可以做些什么来进一步解决这个问题?

【问题讨论】:

    标签: azure azure-cognitive-search


    【解决方案1】:

    首先,我假设您的查询分布相当均匀,这意味着根据您的数字,您每秒只有约 1 个查询。这听起来正确吗?如果没有,并且您看到大量的查询高峰,则很可能您没有足够的副本(索引的副本)来处理查询负载。请注意,单个副本基本服务旨在处理低个位数的 QPS(尽管这可能会根据查询的复杂性或简单性而有很大差异)。如果超出服务的限制,延迟肯定会成为一个问题。深入了解这一点的一个好方法是使用Azure Search Traffic Analytics,它可以公开搜索指标,其中包括各种时间范围内每秒查询数以及我们在内部看到的延迟指标等数据。

    另外,最重要的是,请尽量重用 HTTP 连接,并尽可能利用 HTTP 连接池。顺便说一句,在 .NET 中,如果使用我们的 Azure 搜索 SDK,您应该重用单个 HttpClient 实例或 SearchIndexClient 实例。

    【讨论】:

    • 我们的流量确实不同,所以它比这更集中。在今天早上 7 点到 8 点的高峰时段,有 2270 个呼叫,仍然低于 1 QPS。请求直接来自我们用户的浏览器,因此没有机会共享连接。免费层是否有可能提供比基本层​​更好的性能?我已开启分析以收集更多数据。
    • 是的,您可能会偶尔看到使用 free 的更好性能,但您还必须记住,free 是一个多租户系统,这意味着使用 free 的其他用户的使用可以影响服务的整体性能。基本和标准是专用资源,这意味着您应该看到一致的性能水平。事实上,当您查看来自搜索流量分析的数据时,如果您发现在一致的流量水平下表现不一致,我们希望对此进行更深入的研究。
    • 此时它看起来像是周一早上的短暂问题。如果我能够捕获一些可操作的数据,我将继续进行分析并报告。
    【解决方案2】:

    我在 Azure 搜索论坛上收集了更多数据并posted my results

    速度变慢的原因是我们正在运行单个基本实例,并且 Azure 搜索团队的代码部署导致服务出现短暂(根据我的经验需要几分钟)中断/降级。

    我发现运行两个基本实例过于昂贵。我们的搜索流量不保证两个实例,除非出于可用性目的。

    我从论坛了解到,免费层通常比单个基本实例具有更高的可用性。因此,我提交了feedback item 建议使用付费共享层,该层将提供比免费层更多的存储空间,同时保持比单个专用实例更高的可用性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多