

# io/socket/sql/client\$1connection
<a name="ams-waits.client-connection"></a>

当线程正处理新连接时，将发生 `io/socket/sql/client_connection` 事件。

**Topics**
+ [

## 支持的引擎版本
](#ams-waits.client-connection.context.supported)
+ [

## 上下文
](#ams-waits.client-connection.context)
+ [

## 等待次数增加的可能原因
](#ams-waits.client-connection.causes)
+ [

## 操作
](#ams-waits.client-connection.actions)

## 支持的引擎版本
<a name="ams-waits.client-connection.context.supported"></a>

以下引擎版本支持此等待事件信息：
+ Aurora MySQL 版本 2 和 3

## 上下文
<a name="ams-waits.client-connection.context"></a>

事件 `io/socket/sql/client_connection` 表示 mysqld 正忙于创建线程来处理传入的新客户端连接。在这种情况下，在连接等待分配线程的同时，服务新客户端连接请求的处理速度会减慢。有关更多信息，请参阅 [MySQL 服务器 (mysqld)](AuroraMySQL.Managing.Tuning.concepts.md#AuroraMySQL.Managing.Tuning.concepts.processes.mysqld)。

## 等待次数增加的可能原因
<a name="ams-waits.client-connection.causes"></a>

当此事件的发生率超过正常（可能表示性能问题）时，典型原因包括以下几点：
+ 从应用程序到 Amazon RDS 实例的新用户连接突然增加。
+ 由于网络、CPU 或内存受到限制，您的数据库实例无法处理新连接。

## 操作
<a name="ams-waits.client-connection.actions"></a>

如果 `io/socket/sql/client_connection` 主导着数据库活动，它不一定表示性能问题。在不处于空闲状态的数据库中，等待事件始终处于首位。只有在性能下降时才采取行动。根据等待事件的原因，我们建议采取不同的操作。

**Topics**
+ [

### 识别有问题的会话和查询
](#ams-waits.client-connection.actions.identify-queries)
+ [

### 遵循连接管理的最佳实践
](#ams-waits.client-connection.actions.manage-connections)
+ [

### 如果资源受到限制，则纵向扩展实例
](#ams-waits.client-connection.upgrade)
+ [

### 检查首要主机和主要用户
](#ams-waits.client-connection.top-hosts)
+ [

### 查询 performance\$1schema 表
](#ams-waits.client-connection.perf-schema)
+ [

### 检查查询的线程状态
](#ams-waits.client-connection.thread-states)
+ [

### 审核您的请求和查询
](#ams-waits.client-connection.auditing)
+ [

### 池化您的数据库连接
](#ams-waits.client-connection.pooling)

### 识别有问题的会话和查询
<a name="ams-waits.client-connection.actions.identify-queries"></a>

如果数据库实例遇到瓶颈，您的首要任务是查找导致瓶颈的会话和查询。有关有用的博客文章，请参阅[利用性能详情分析 Amazon Aurora MySQL 工作负载](https://aws.amazon.com/blogs/database/analyze-amazon-aurora-mysql-workloads-with-performance-insights/)。

**识别导致瓶颈的会话和查询**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**性能详情**。

1. 选择您的数据库实例。

1. 在 **Database load**（数据库负载）中，选择 **Slice by wait**（按等待切片）。

1. 在页面底部，选择 **Top SQL**（主要 SQL）。

   列表顶部的查询导致数据库负载最高。

### 遵循连接管理的最佳实践
<a name="ams-waits.client-connection.actions.manage-connections"></a>

要管理连接，请考虑以下策略：
+ 使用连接池。

  您可以根据需要逐步增加连接数量。有关更多信息，请参阅白皮书 [Amazon Aurora MySQL 数据库管理员手册](https://d1.awsstatic.com/whitepapers/RDS/amazon-aurora-mysql-database-administrator-handbook.pdf)。
+ 使用读取器节点重新分配只读流量。

  有关更多信息，请参阅 [Aurora 副本](Aurora.Replication.md#Aurora.Replication.Replicas) 和 [Amazon Aurora 端点连接](Aurora.Overview.Endpoints.md)。

### 如果资源受到限制，则纵向扩展实例
<a name="ams-waits.client-connection.upgrade"></a>

在以下资源中查找节流的示例：
+ CPU

  检查您的 Amazon CloudWatch 指标是否存在高 CPU 使用率。
+ Network

  检查 CloudWatch 指标 `network receive throughput` 和 `network transmit throughput` 的值是否增加。如果您的实例已达到实例类的网络带宽限制，请考虑将 RDS 实例纵向扩展到更高的实例类类型。有关更多信息，请参阅 [Amazon Aurora数据库实例类](Concepts.DBInstanceClass.md)。
+ 可用内存 

  检查 CloudWatch 指标 `FreeableMemory` 是否有下降。另外，请考虑开启增强监控功能。有关更多信息，请参阅 [使用增强监控来监控操作系统指标](USER_Monitoring.OS.md)。

### 检查首要主机和主要用户
<a name="ams-waits.client-connection.top-hosts"></a>

使用性能详情查看首要主机和主要用户。有关更多信息，请参阅 [使用 Performance Insights 控制面板分析指标](USER_PerfInsights.UsingDashboard.md)。

### 查询 performance\$1schema 表
<a name="ams-waits.client-connection.perf-schema"></a>

要获得当前连接和总连接数的准确计数，请查询 `performance_schema` 表。使用此方法，您可以识别负责创建大量连接的源用户或主机。例如，如下所示查询 `performance_schema` 表。

```
SELECT * FROM performance_schema.accounts;
SELECT * FROM performance_schema.users;
SELECT * FROM performance_schema.hosts;
```

### 检查查询的线程状态
<a name="ams-waits.client-connection.thread-states"></a>

如果性能问题仍然存在，请检查查询的线程状态。在 `mysql` 客户端中，发出以下命令。

```
show processlist;
```

### 审核您的请求和查询
<a name="ams-waits.client-connection.auditing"></a>

要查看来自用户账户的请求和查询的性质，请使用 AuroraAurora MySQL 高级审核。要了解如何启用审核，请参阅 [在 Amazon Aurora MySQL 数据库集群中使用高级审计](AuroraMySQL.Auditing.md)。

### 池化您的数据库连接
<a name="ams-waits.client-connection.pooling"></a>

考虑使用 Amazon RDS 代理进行连接管理。通过使用 RDS 代理，您可以允许您的应用程序池化和共享数据库连接，以提高其扩展能力。RDS 代理通过在保留应用程序连接的同时自动连接到备用数据库实例，使应用程序能够更好地抵御数据库故障。有关更多信息，请参阅 [适用于 Aurora 的Amazon RDS 代理](rds-proxy.md)。