我想对我的 Amazon Relational Database Service(Amazon RDS)数据库实例中的写入延迟峰值进行问题排查。
简短描述
Amazon CloudWatch 指标 WriteLatency 定义了每个磁盘 I/O 操作所用的平均时间。理想情况下,写入延迟不得超过一位数毫秒。
执行以下操作可能会导致数据库实例的写入延迟峰值:
峰值也可能是由数据库工作负载繁重导致的 IOPS 或吞吐量瓶颈造成的。
解决方法
延迟峰值问题排查
1. 要对数据库实例读取或写入延迟较高的原因进行问题排查,请检查以下 CloudWatch 指标:
- ReadLatency 和 WriteLatency
- ReadIOPS 和 WriteIOPS
- ReadThroughput 和 WriteThroughput
- DiskQueueDepth
- BurstBalance(用于 gp2 存储)
假设您注意到以下一种或多种情况:
- 延迟值很高。
- 吞吐量和 IOPS 值已达到其最大限制。
- DiskQueueDepth 的值很高。
- BurstBalance 的值很低(对于 gp2)。
这意味着您的 RDS 实例处于繁重的工作负载下,需要更多资源。有关更多信息,请参阅如何排查 Amazon RDS 实例中由 IOPS 瓶颈导致的 Amazon EBS 卷延迟问题?
要对导致 IOPS 或吞吐量瓶颈的问题进行问题排查,请执行以下操作:
对于具有通用型 SSD(gp2)的 RDS 实例,请检查数据库实例的类和存储大小。
对于具有预调配 IOPS(io1)的 RDS 实例,请检查数据库实例的类和定义的预调配 IOPS。
有关更多信息,请参阅数据库实例的类和 Amazon EBS 优化实例。
2. 如果 CloudWatch 指标未显示任何资源节流,请使用增强监控检查读取 IO/S 和写入 IO/S。
CloudWatch 指标的记录间隔为 60 秒。因此,可能不会记录每一次峰值或跌落。但是,您可以将增强监控的粒度设置为最多一秒钟以捕获数据。增强监控可以捕获 60 秒间隔内的任何资源利用率峰值。有关更多信息,请参阅如何确定 EBS 卷中出现微爆发,如何防止这种情况发生?
3. 如果前面的所有检查都没有指出问题的原因,请检查 CloudWatch 指标 NetworkReceiveThroughput 和 NetworkTransmitThroughput,以确保网络没有问题。
减轻延迟加载的影响
从快照恢复 RDS 数据库实例时,该数据库实例将继续在后台加载数据。此过程称为延迟加载。
延迟加载可能发生在需要从快照恢复的所有情形中,例如时间点恢复、将单可用区实例转换为多可用区实例以及创建新的只读副本。如果您尝试访问尚未加载的数据,数据库实例会立即从 Amazon Simple Storage Service(Amazon S3)下载请求的数据。然后,实例继续在后台加载其余数据。有关更多信息,请参阅 Amazon EBS 快照。为了减轻延迟加载对需要快速访问的表的影响,您可以执行涉及全表扫描的操作,例如 SELECT *。这允许 RDS 从 Amazon S3 下载所有备份的表数据。
遵循最佳实践
在处理数据库实例中的高写入延迟时,请牢记以下最佳实践和解决方法:
- 确保为数据库分配了足够的资源来运行查询。使用 RDS 时,分配的资源量取决于实例类型。
- 如果 CloudWatch 指标和增强监控指标均未显示资源节流,则使用 Performance Insights 监控数据库工作负载。使用 Performance Insights,当您的应用程序出现延迟时,您可以识别数据库中运行的基础 SQL 查询。您可以使用此信息来评估数据库的负载并确定进一步的操作。有关更多信息,请参阅使用 Amazon RDS 上的 Performance Insights 监控数据库负载。
- 根据您的使用案例更改 Amazon EBS 卷的大小或类型,防止出现微爆发。
- 要优化数据库性能,请确保正确调整查询。
- 如果您要将单可用区数据库实例转换为多可用区实例,请考虑在非工作时间进行转换。
- 要减少多可用区转换后延迟加载的影响,请考虑执行以下任意一项操作:
- 转换为多可用区实例后立即执行手动失效转移。
- 运行完全转储或仅运行必需的查询,以加载表中的所有数据。此过程有助于加载数据并强制将所有数据块从 S3 推送到新主机。对于 Amazon RDS for PostgreSQL 实例,您可以运行 pg_prewarm 命令。
- 您可以针对 RDS 关键指标配置 Amazon CloudWatch 警报,这些警报可用于确定 RDS 实例中写入延迟峰值的原因。这些指标的示例包括 ReadIOPS、WriteIOPS、ReadThroughput、WriteThroughput、DiskQueueDepth、ReadLatency 和 WriteLatency。您可以使用这些警报来确保实例不会出现节流。
相关信息
Amazon RDS 最佳实践
了解 Amazon RDS 和 GP2 的爆发和基准性能
将数据库实例修改为多可用区数据库实例部署
教程:从数据库快照恢复 Amazon RDS 数据库实例