开发者社区> 问答> 正文

技术运维问题 - MYSQL使用 -RDS for MySQL 连接数满情况的处理

RDS for MySQL 连接数满有 2 种情况。

1. 空闲连接过多




1.1 原因



1.2 解决


  • 通过 DMS 或者 Kill 命令来终止当前空闲会话,详细步骤请参考: RDS MySQL 如何终止连接

  • 修改应用,长连接模式需要启用连接池的复用功能(建议也启用连接检测功能),具体设置请参考连接池配置文档。

  • 修改应用,短连接模式需要在代码中查询结束后调用关闭连接的方法。

  • 对于非交互模式连接,控制台 设置 interactive_timeout 参数为较小值。interactive_timeout 参数控制交互模式连接的超时时间(单位秒,默认值为 2 小时 - 7200 秒),当交互式连接空闲时间超过 interactive_timeout 指定的时间后,RDS 实例会主动关闭(断开)连接。


建议与说明:

  • 在 RDS MySQL 实例连接数完全打满的情况下,通过 DMS 或者其他方式是无法连接实例的;因此对于长连接模式,建议连接池的最大连接数要略小于实例规格的连接数限制,比如保留 10 个连接给DMS或其他管理操作使用。当发生无法连接的情况时,建议先在控制台修改 wait_timeout 参数为较小值,促使 RDS 实例主动关闭空闲时间超过阈值的连接。

  • 通常情况下,应用到 RDS 实例会采用非交互模式;具体采用哪个模式需要查看应用的连接方式配置,比如 PHP 通过传递 MYSQL_CLIENT_INTERACTIVE 常量给 mysql_connect() 函数即可开启连接的交互模式。

  • RDS MySQL 作为服务器,被动的接收来自应用或客户端的连接,处理应用或客户端提交的查询或命令并返回结果。RDS 实例自身是不会主动发起连接的。

注:
  • 在出现大量空闲连接之前,有可能会出现瞬间连接数过多的情况,由于 RDS 作为服务器被动接收连接,通常情况下是应用 SQL 未优化(或应用引起的锁等待)导致的问题,因此需要从 SQL 优化(应用优化)入手来根本解决这个问题。
  • wait_timeout 和 interactive_timeout 这两个参数的修改,修改前已经存在的会话保持修改前的设置,修改后新创建的会话使用新的参数设置。


2. 活动连接过多


[url=http://img01.taobaocdn.com/tfscom/TB1mlwIKpXXXXbRXpXXXXXXXXXX.png]

2.1 原因


  • 锁等待导致活动连接数增加(包括 InnoDB 锁等待、MyISAM 表级锁等待、表元数据锁等待)

  • CPU 使用率高导致活动连接数增加

  • IOPS 使用率高导致活动连接数增加


2.2 解决

展开
收起
梨好橙 2018-09-26 23:36:07 2647 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像