AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何排查 Amazon RDS 实例中由 IOPS 瓶颈导致的 Amazon EBS 卷延迟问题?
我有一个 Amazon Relational Database Service(Amazon RDS)数据库实例。我想排查 Amazon RDS 实例中的 Amazon Elastic Block Store(Amazon EBS)卷延迟问题。
解决方法
由 IOPS 或吞吐量瓶颈导致的 Amazon RDS 实例延迟,最常见的原因包括:
- 实例级别的 IOPS 瓶颈
- 卷级别的 IOPS 瓶颈
- 实例级别的吞吐量瓶颈
- 卷级别的吞吐量瓶颈
- 微突发
根据您的使用案例使用以下问题排查步骤。
具有通用型 SSD(gp2)的 RDS 实例
执行以下检查:
- 检查 Amazon RDS 实例的配置信息,例如数据库实例类和存储空间大小。此信息可以帮助您跟踪 IOPS 和吞吐量限制。在排查引发 IOPS 或吞吐量瓶颈的问题时,您必须知晓这些值。
- 使用 Amazon CloudWatch 图表检查 DiskQueueDepth、ReadLatency 和 WriteLatency 的值是否出现任何峰值。在正常情况下,最佳实践是对每 1000 个 IOPS 每分钟使用一个 DiskQueueDepth。预计 ReadLatency 和 WriteLatency 将低于 10 毫秒。如果您发现峰值,那么请确定峰值时间。
- 使用 CloudWatch 图表查看 ReadIOPS 和 WriteIOPS 指标。检查在 DiskQueueDepth、ReadLatency 和 WriteLatency 的值出现峰值的时间范围内,是否在卷级别超出了 IOPS 限制。
- 使用 CloudWatch 图表检查 BurstBalance 的值是否下降。此检查仅适用于小于 1TB 的卷。如果 BurstBalance 的值下降,则表明在出现峰值的时间范围内出现了 IOPS 瓶颈。
- 使用 CloudWatch 图表检查 ReadThroughput 和 WriteThroughput 指标。检查在 ReadThroughput 和 WriteThroughput 的值出现峰值的时间范围内,是否在卷级别超出了吞吐量限制。
- 如果您使用的是 EBS 优化的 RDS 实例类,请使用 CloudWatch 图表检查 IOPS 或吞吐量是否发生了限流。对于出现容量爆增的实例类,请在 CloudWatch 图表中检查 EBSIOBalance% 和 EBSByteBalance% 指标。如果 EBSIOBalance% 或 EBSByteBalance% 的值一直较低,则表明实例级别出现了 IOPS 或吞吐量瓶颈。
如果 IOPS 和/或吞吐量出现限流,则表明 IOPS 或吞吐量在存储级别难以满足工作负载的需求。要解决此问题,请执行以下操作:
- 找到对数据库造成更多负载的 SQL 查询,然后优化这些查询。如果工作负载正常,或者没有调整 SQL 查询的空间,则可能需要增加存储空间才能获得更高的 IOPS 容量。
**注意:**增加 RDS 实例的存储空间后,将无法再将此值减小到之前的值。 - 考虑将卷从通用型(gp2)切换到预置 IOPS(io1)。如果数据库实例为单可用区并且您使用的是自定义参数组,则在 gp2 和 io1 之间切换可能会导致短暂停机。如果您的实例为多可用区,则不会发生任何停机。
- 如果您注意到实例级别的 IOPS 或吞吐量出现限流,则必须扩展实例类,以获得更高的 IOPS 或吞吐容量。
具有预置 IOPS(io1)的 RDS 实例
- 检查 Amazon RDS 实例的配置信息(例如数据库实例类和定义的预置 IOPS),以确定数据库实例类的 IOPS 限制或吞吐量限制。
- 使用 CloudWatch 图表检查 DiskQueueDepth、ReadLatency 和 WriteLatency 的值是否出现任何峰值。在正常情况下,最佳实践是对每 1000 个 IOPS 每分钟使用一个 DiskQueueDepth。预计 ReadLatency 或 WriteLatency 将低于 10 毫秒。如果您发现峰值,那么请确定峰值时间。
- 使用 CloudWatch 图表查看 ReadIOPS 和 WriteIOPS 指标。检查在 DiskQueueDepth、ReadLatency 和 WriteLatency 的值出现峰值的时间范围内,是否超出了 IOPS 限制。
- 使用 CloudWatch 图表检查 ReadThroughput 和 WriteThroughput 指标。检查在 ReadThroughput 和 WriteThroughput 的值出现峰值的时间范围内,是否超出了吞吐量限制。
- 如果您使用的是 EBS 优化的 RDS 实例类,请使用 CloudWatch 图表检查 IOPS 或吞吐量是否发生了限流。对于出现容量爆增的实例类,请在 CloudWatch 图表中检查 EBSIOBalance% 和 EBSByteBalance% 指标。如果 EBSIOBalance% 或 EBSByteBalance% 的百分比值一直较低,则表明实例级别分别出现了 IOPS 或吞吐量瓶颈。
如果 IOPS 或吞吐量出现限流,则表明 IOPS 或吞吐量在存储级别难以满足工作负载的需求。要解决此问题,请执行以下操作:
- 找到对数据库造成更多负载的 SQL 查询,然后优化这些查询。如果工作负载正常,或者没有调整 SQL 查询的空间,则可能需要增加预置 IOPS。
- 如果您注意到实例级别的 IOPS 或吞吐量出现限流,则需要扩展实例类,以获得更高的吞吐量或 IOPS。
微突发
当 EBS 卷在明显短于收集周期内“突发”高 IOPS 或吞吐量时,就会出现微突发情况。CloudWatch 指标的收集间隔为 60 秒。由于卷在短于收集周期的时间内出现爆突发 IOPS 或吞吐量的时间,因此 CloudWatch 不会反映这种突发情况。您可以使用增强监控来确定微突发是否会导致延迟。启用增强监控(粒度为 1 秒)。您可以使用读取 IO/s 和写入 IO/s 指标来确定实际的 IOPS 利用率。您可以使用读取 KB/s 和写入 KB/s 来确定每秒的实际吞吐量利用率。有关更多信息,请参阅增强监控指标说明。
