io/aurora_respond_to_client
当线程等待将结果集返回给客户端时,会发生 io/aurora_respond_to_client
事件。
支持的引擎版本
以下引擎版本支持此等待事件信息:
-
Aurora MySQL 版本 2
在版本 2.07.7、2.09.3 和 2.10.2 之间的版本中,此等待事件错误地包含空闲时间。
上下文
事件 io/aurora_respond_to_client
表示线程正等待将结果集返回给客户端。
查询处理已完成,结果将返回应用程序客户端。但是,由于数据库集群上没有足够的网络带宽,线程正在等待返回结果集。
等待次数增加的可能原因
当 io/aurora_respond_to_client
事件的发生率超过正常(可能表示性能问题)时,典型原因包括以下几点:
- 数据库实例类不足以满足工作负载
-
数据库集群使用的数据库实例类没有高效处理工作负载所需的网络带宽。
- 大型结果集
-
返回的结果集的大小有所增加,因为查询返回的行数越多。结果集越大,消耗的网络带宽越多。
- 客户端负载增加
-
客户端上可能存在 CPU 压力、内存压力或网络饱和。客户端负载的增加会延迟从 Aurora MySQL 数据库集群接收数据的过程。
- 网络延迟增加
-
Aurora MySQL 数据库集群和客户端之间的网络延迟可能会增加。较高的网络延迟会增加客户端接收数据所需的时间。
操作
根据等待事件的原因,我们建议采取不同的操作。
确定导致事件的会话和查询
您可以使用性能详情显示被 io/aurora_respond_to_client
等待事件阻止的查询。通常,具有中等到大量负载的数据库都会有等待事件。如果性能最佳,等待事件可能是可以接受的。如果性能不佳,请检查数据库花费最多时间的位置。查看导致最高负载的等待事件,并了解是否可以优化数据库和应用程序以减少这些事件。
查找负责高负载的 SQL 查询
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Performance Insights。
-
选择一个数据库实例。将为该数据库实例显示性能详情控制面板。
-
在 Database load(数据库负载)图表中,选择 Slice by wait(按等待切片)。
-
在页面底部,选择 Top SQL(主要 SQL)。
该图表列出了负责加载的 SQL 查询。排在列表前面的负载负有最大的责任。为了解决瓶颈,请关注这些语句。
有关使用性能详情进行故障排除的有用概览,请参阅 AWS 数据库博客文章使用性能详情分析 Amazon Aurora MySQL 工作负载
扩展数据库实例类
检查与网络吞吐量相关的 Amazon CloudWatch 指标值的增加,例如 NetworkReceiveThroughput
和 NetworkTransmitThroughput
。如果达到数据库实例类网络带宽,您可以通过修改数据库集群来扩展数据库集群使用的数据库实例类。网络带宽较大的数据库实例类可以更高效地将数据返回给客户端。
有关监控 Amazon CloudWatch 指标的信息,请参阅 在 Amazon RDS 控制台中查看指标。有关数据库实例类的信息,请参阅 Amazon Aurora 数据库实例类。有关修改数据库集群的信息,请参阅修改 Amazon Aurora 数据库集群。
检查工作负载是否有意外结果
检查数据库集群上的工作负载,并确保它不会产生意外的结果。例如,可能有查询返回的行数比预期的要多。在这种情况下,您可以使用性能详情计数器指标,例如 Innodb_rows_read
。有关更多信息,请参阅 Performance Insights 计数器指标。
使用读取器实例分配工作负载
您可以用 Aurora 副本分配只读工作负载。您可以通过添加更多 Aurora 副本来进行水平扩展。这样做可能会增加网络带宽的节流限制。有关更多信息,请参阅 Amazon Aurora 数据库集群。
使用 SQL_BUFFER_RESULT 修饰符
您可以添加 SQL_BUFFER_RESULT
修饰符到 SELECT
语句中,在将结果返回给客户端之前将结果强制放入临时表中。当 InnoDB 锁没有被释放时,此修饰符可以帮助解决性能问题,因为查询处于 io/aurora_respond_to_client
等待状态。有关更多信息,请参阅 MySQL 文档中的 SELECT 语句