排查 Azure 存储帐户中的可用性问题

本文可帮助你调查可用性 (更改,例如) 失败的请求数。 通常可以通过监视 Azure Monitor 中的存储指标来识别这些可用性更改。 有关在 Azure Monitor 中使用指标和日志的一般信息,请参阅以下文章:

监视可用性

应通过监视 可用性指标的值 来监视存储帐户中存储服务的可用性。 可用性指标包含百分比值。 计算方法为:将总可计费请求值除以适用请求数,包括产生意外错误的请求数。

任何小于 100% 的值都表示某些存储请求失败。 可以通过检查 ResponseType 维度中的错误类型(如 ServerTimeoutError)来了解它们失败的原因。 在服务移动分区以更好地对请求进行负载均衡时,由于暂时性服务器超时等原因,预计 可用性 会暂时降至 100% 以下;客户端应用程序中的重试逻辑应处理此类间歇性情况。

可以使用 Azure Monitor 中的功能在服务 可用性 低于指定的阈值时发出警报。

指标显示限制错误的增加

超出存储服务的可伸缩性目标时,会发生限制错误。 存储服务会受到限制,以确保任何客户端或租户都不能以牺牲其他客户端或租户为代价使用该服务。 有关详细信息,请参阅 标准存储帐户的可伸缩性和性能目标 ,详细了解存储帐户的可伸缩性目标和存储帐户中分区的性能目标。

如果 ResponseType 维度的 ClientThrottlingErrorServerBusyError 值显示失败并出现限制错误的请求百分比增加,则需要调查以下两种方案之一:

  • PercentThrottlingError 的暂时性增加
  • PercentThrottlingError 错误的永久增加

限制错误增加通常与存储请求数的增加或最初对应用程序进行负载测试时同时发生。 这也可能在客户端中显示为存储操作中的“503 服务器繁忙”或“500 操作超时”HTTP 状态消息。

限制错误的暂时性增加

如果看到与应用程序高活动时段相吻合的限制错误高峰,则需在客户端中实现指数 (而不是线性) 退避策略。 回退重试可减少分区上的即时负载,并帮助应用程序消除流量高峰。 有关如何使用存储客户端库实现重试策略的详细信息,请参阅 RetryOptions.MaxRetries 属性。

注意

还可能会看到限制错误的峰值,这些错误与应用程序的高活动时段不一致。 最有可能的原因是存储服务移动分区以改进负载均衡。

限制错误永久增加

如果在事务量永久增加后或对应用程序执行初始负载测试时,出现限制错误的始终高值,则需要评估应用程序如何使用存储分区,以及它是否接近存储帐户的可伸缩性目标。 例如,如果在队列 (看到限制错误,该错误计为单个分区) ,则考虑使用其他队列将事务分散到多个分区。 如果在表上看到限制错误,请考虑使用不同的分区方案,通过使用更广泛的分区键值将事务分散到多个分区。 此问题的一个常见原因是前追加/追加反模式,其中选择日期作为分区键,然后特定日期的所有数据将写入一个分区, (负载下,这可能会导致写入瓶颈) 。 请考虑不同的分区设计,或评估使用 Blob 存储是否是更好的解决方案。 此外,检查是否由于流量高峰而发生限制,并调查平滑请求模式的方法。

如果跨多个分区分发事务,则仍必须了解为存储帐户设置的可伸缩性限制。 例如,如果使用了 10 个队列,每个队列每秒最多处理 2,000 个 1KB 消息,则存储帐户的总限制为每秒 20,000 条消息。 如果需要每秒处理超过 20,000 个实体,请考虑使用多个存储帐户。 还应记住,当存储服务限制客户端时,请求和实体的大小会影响。 如果请求和实体较大,可能会更早地受到限制。

低效的查询设计还可能导致你达到表分区的可伸缩性限制。 例如,具有筛选器的查询仅选择分区中实体的 1%,但扫描分区中的所有实体需要访问每个实体。 每个实体读取都将计入该分区中的事务总数。 因此,可以轻松达到可伸缩性目标。

注意

性能测试应显示应用程序中任何低效的查询设计。

指标显示超时错误增加

当 ResponseType 维度等于 ServerTimeoutErrorClientTimeout 时发生超时错误。

指标显示其中一个存储服务的超时错误增加。 同时,客户端从存储操作接收大量“500 操作超时”HTTP 状态消息。

注意

存储服务通过将分区移动到新服务器来对请求进行负载均衡时,可能会暂时看到超时错误。

服务器超时 (ServerTimeOutError) 是由服务器上的错误引起的。 客户端超时 (ClientTimeout) 发生,因为服务器上的操作已超过客户端指定的超时。 例如,使用存储客户端库的客户端可以为操作设置超时。

服务器超时表示存储服务存在问题,需要进一步调查。 可以使用指标来查看是否达到了服务的可伸缩性限制,并确定可能导致此问题的任何流量高峰。 如果问题是间歇性的,则可能是由于服务中的负载均衡活动造成的。 如果问题持续存在,并且不是由应用程序达到服务的可伸缩性限制引起的,则应引发支持问题。 对于客户端超时,你必须决定超时是否在客户端中设置为适当的值,并更改在客户端中设置的超时值,或者调查如何改进存储服务中操作的性能,例如,通过优化表查询或减小消息的大小。

指标显示网络错误增加

当 ResponseType 维度等于 NetworkError 时,会发生网络错误。 当存储服务在客户端发出存储请求时检测到网络错误时,会发生这些错误。

此错误的最常见原因是客户端在存储服务超时到期前断开连接。 调查客户端中的代码,了解客户端与存储服务断开连接的原因和时间。 还可以使用第三方网络分析工具调查客户端的网络连接问题。

另请参阅

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。