io/socket/sql/client_connection
当线程正处理新连接时,将发生 io/socket/sql/client_connection
事件。
支持的引擎版本
以下引擎版本支持此等待事件信息:
-
Aurora MySQL 版本 2 和 3
上下文
事件 io/socket/sql/client_connection
表示 mysqld 正忙于创建线程来处理传入的新客户端连接。在这种情况下,在连接等待分配线程的同时,服务新客户端连接请求的处理速度会减慢。有关更多信息,请参阅 MySQL 服务器 (mysqld)。
等待次数增加的可能原因
当此事件的发生率超过正常(可能表示性能问题)时,典型原因包括以下几点:
-
从应用程序到 Amazon RDS 实例的新用户连接突然增加。
-
由于网络、CPU 或内存受到限制,您的数据库实例无法处理新连接。
操作
如果 io/socket/sql/client_connection
主导着数据库活动,它不一定表示性能问题。在不处于空闲状态的数据库中,等待事件始终处于首位。只有在性能下降时才采取行动。根据等待事件的原因,我们建议采取不同的操作。
主题
识别有问题的会话和查询
如果数据库实例遇到瓶颈,您的首要任务是查找导致瓶颈的会话和查询。有关有用的博客文章,请参阅利用性能详情分析 Amazon Aurora MySQL 工作负载
识别导致瓶颈的会话和查询
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Performance Insights。
-
选择您的数据库实例。
-
在 Database load(数据库负载)中,选择 Slice by wait(按等待切片)。
-
在页面底部,选择 Top SQL(主要 SQL)。
列表顶部的查询导致数据库负载最高。
遵循连接管理的最佳实践
要管理连接,请考虑以下策略:
-
使用连接池。
您可以根据需要逐步增加连接数量。有关更多信息,请参阅白皮书 Amazon Aurora MySQL 数据库管理员手册
。 -
使用读取器节点重新分配只读流量。
有关更多信息,请参阅 Aurora 副本 和 Amazon Aurora 端点连接。
如果资源受到限制,则纵向扩展实例
在以下资源中查找节流的示例:
-
CPU
检查您的 Amazon CloudWatch 指标是否存在高 CPU 使用率。
-
网络
检查 CloudWatch 指标
network receive throughput
和network transmit throughput
的值是否增加。如果您的实例已达到实例类的网络带宽限制,请考虑将 RDS 实例纵向扩展到更高的实例类类型。有关更多信息,请参阅 Amazon Aurora 数据库实例类。 -
可用内存
检查 CloudWatch 指标
FreeableMemory
是否有下降。另外,请考虑开启增强监控功能。有关更多信息,请参阅 使用增强监控来监控操作系统指标。
检查首要主机和主要用户
使用性能详情查看首要主机和主要用户。有关更多信息,请参阅 使用 Performance Insights 控制面板分析指标。
查询 performance_schema 表
要获得当前连接和总连接数的准确计数,请查询 performance_schema
表。使用此方法,您可以识别负责创建大量连接的源用户或主机。例如,如下所示查询 performance_schema
表。
SELECT * FROM performance_schema.accounts; SELECT * FROM performance_schema.users; SELECT * FROM performance_schema.hosts;
检查查询的线程状态
如果性能问题仍然存在,请检查查询的线程状态。在 mysql
客户端中,发出以下命令。
show processlist;
审核您的请求和查询
要查看来自用户账户的请求和查询的性质,请使用 AuroraAurora MySQL 高级审核。要了解如何启用审核,请参阅 在 Amazon Aurora MySQL 数据库集群中使用高级审计。
池化您的数据库连接
考虑使用 Amazon RDS 代理进行连接管理。通过使用 RDS 代理,您可以允许您的应用程序池化和共享数据库连接,以提高其扩展能力。RDS Proxy 通过在保留应用程序连接的同时自动连接到备用数据库实例,使应用程序能够更好地抵御数据库故障。有关更多信息,请参阅 将 Amazon RDS 代理用于 Aurora。