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

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

监视可用性

应通过监视“可用性”指标的值来监视存储帐户中存储服务的可用性。 可用性指标包含百分比值。 它通过获取总可计费请求值并将其除以适用请求数(包括产生意外错误的请求数)来计算。

任何小于 100% 的值指示某些存储请求将失败。 可以通过检查 ServerTimeoutError错误类型的 ResponseType 维度来了解它们失败的原因。 由于暂时性服务器超时等原因,预期 可用性 会暂时低于 100%,而服务移动分区以更好地对请求进行负载均衡;客户端应用程序中的重试逻辑应处理此类间歇性情况。 仅当帐户上也发生事务时,可用性指标才可用于时间段。

可以使用 Azure Monitor 中的功能在服务的“可用性”低于指定的阈值时提示你。

指标显示限制错误数增加

当超出存储服务的可伸缩性目标时,会发生限制错误。 存储服务进行限制是为了确保没有单个客户端或租户可以在损害其他客户端或租户的情况下使用服务。 有关存储帐户的可伸缩性目标和存储帐户中分区的性能目标的详细信息,请参阅标准存储帐户的可伸缩性和性能目标

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

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

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

限制错误数暂时性增加

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

注意

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

限制错误数永久性增加

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

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

低效的查询设计也会导致达到表分区的伸缩性限制。 例如,一个使用筛选器的查询仅选择分区中百分之一的实体,但却扫描该分区中的所有实体,这需要访问每个实体。 读取的每个实体将计入该分区中的事务总数。 因此,可以轻松达到可伸缩性目标。

注意

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

指标显示超时错误数增加

当 ResponseType 维度等于 ServerTimeoutError 或 ClientTimeout 时发生超时错误。

指标显示存储服务之一的超时错误数增加。 同时,客户端收到存储操作发出的大量“500 操作超时”HTTP 状态消息。

注意

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

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

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

指标显示网络错误数增加

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

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

另请参阅

联系我们寻求帮助

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