
# 连接数满
#### 场景描述
当数据库侧连接数打满时，会收到连接数满告警或客户端新建连接超时失败。
#### 原因分析
表1连接数满原因分析 
| **原因**                                                                                                        | **描述**                           | **影响**                            |
|:---|:---|:---|
| 连接池未使用或配置不当    | 未使用连接池，直接创建和关闭数据库连接。             | 高并发下数据库连接数激增，资源耗尽，系统性能下降。         |
| 连接池未使用或配置不当    | 连接池最大连接数设置过高。                    | 低负载时维持大量连接，浪费数据库资源，可能影响其他服务。      |
| 连接池未使用或配置不当    | 连接池最小空闲连接数过大。                    | 低负载时维持大量空闲连接，增加数据库资源消耗。           |
| 连接池未使用或配置不当    | 未及时回收空闲连接（如未配置超时时间或回收策略）。        | 空闲连接累积，最终撑满数据库连接池，新请求无法获取连接。      |
| 业务突发流量                                                                                                        | 秒杀、大促等活动导致并发请求瞬间飙升，连接创建速度远超释放速度。 | 数据库连接数迅速耗尽，系统响应延迟甚至崩溃。            |
| 慢SQL与长事务                      | SQL执行时间过长，占用连接未及时释放。             | 连接池可用连接减少，迫使应用创建更多连接，加剧资源竞争。      |
| 慢SQL与长事务                      | 事务未及时提交，长时间占用连接。                 | 连接池可用连接减少，系统性能下降，可能引发死锁或超时。       |
| 连接泄漏                                                                                                          | 未正确关闭数据库连接。                      | 连接池可用连接持续减少，最终导致连接资源耗尽，系统无法处理新请求。 |
   
#### 预防措施
- 合理设置如下参数：
  - max_user_connection：限制单个数据库用户的最大并发连接数。
  
  - max_connections：限制整个数据库实例允许建立的并发连接总数（包含所有用户）。
  
  - wait_timeout：控制客户端连接最大空闲时长。当非交互式客户端连接（例如通过应用程序代码进行连接）处于空闲（没有任何活动查询）且超过指定秒数后，数据库侧会主动断开该连接。
  
  - interactive_timeout：控制客户端连接最大空闲时长。当交互式客户端连接（例如通过MySQL 命令行工具（如 mysql -u root -p）进行连接）处于空闲（没有任何活动查询）且超过指定秒数后，数据库侧会主动断开该连接。
   
- 设置告警规则**：**为关键指标设置阈值告警。例如，当连接数超过最大连接数的80% 时触发告警，提醒及时介入。
- 定期终止空闲会话和长会话。
 
#### 优化建议
- 业务侧开启并合理配置连接池。
- 临时扩容数据库连接数 突发流量或短时过载时，可以临时调大max_connections的值。例如当前最大连接数为6500，可以考虑扩大一倍，修改为max_connections=13000。仅作为临时缓解手段，且有触发OOM 的风险，因此业务恢复后需立即调回原值。调大之后也可能新建连接进来可能会继续打满，因此需同时对异常SQL进行限流。
  
- SQL限流与异常SQL治理
  - 对异常SQL（如慢查询、长事务）实施限流，优先保障核心业务。使用TaurusDB的[SQL限流](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0163.html)功能设置阈值，限制高耗资源SQL的并发数。
  
  - 通过慢查询日志定位并优化高频慢SQL，减少单个请求的连接占用时间。
   
- 若各类SQL数量过多，难以实现快速限流，可以选择如下方法恢复：
  - [主备倒换](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0113.html)：当主节点的连接数打满，但是只读节点连接不高时，可以主备倒换快速恢复业务。
  
  - [重启只读节点](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0040.html#ZH-CN_TOPIC_0000001928649493__section4797455112518)：当某个只读连接数打满时，可以重启该只读节点，释放被占用的连接资源。
  
  - [重启实例](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0040.html)：所有节点连接数均打满且无法通过其他手段恢复时，可选择重启实例。但是需谨慎操作，重启会导致短时服务中断，重启会导致Buffer Pool中的热数据被清空，建议在业务低峰期执行。
   
 
