配置RDSMySQL连接池云数据库RDS(RDS)

RDSMySQL数据库代理连接池分为事务级连接池和会话级连接池,您可以按照实际使用场景选择是否使用连接池,以及使用连接池的类型:

连接池类型

使用场景

事务级连接池(推荐)

业务侧多为短连接

连接创建频繁

连接数量很大(大于MySQL数据库的连接数限制)

会话级连接池

不使用连接池

业务侧多为长连接

连接数量很少

业务侧已经使用了连接池(例如:Druid、DBCP、C3P0、HikariCP等)

降低应用与数据库建立连接的频率来减少MySQL数据库主线程的开销。

前端连接与后端连接

在客户端(应用)与数据库建立连接时,以数据库代理为中间节点可将该连接分为前端连接(客户端与数据库代理的连接)和后端连接(数据库代理与数据库的连接)。如下图所示。

未开启连接池时的连接建立过程

未开启连接池时,每条由客户端发起的会话都需要创建前端连接和后端连接。会话结束后,前端连接和后端连接均断开,等到下次客户端发起会话请求时,再重新创建新的前端连接和后端连接。如下图所示。

使用这种建立连接的方式,每次会话都要重新建立后端连接,对数据库的主线程的开销较大。

会话级连接池工作原理

对于会话级连接池,当客户端发起的会话建立连接时,先建立前端连接,然后判断连接池中是否存在可用的后端连接:

判断是否为可用连接的条件:user、clientip和dbname等参数值是否一致。

若存在,则直接使用。

若不存在,则与数据库建立新的后端连接。

会话结束后,前端连接断开,后端连接放入连接池,待新的会话建立连接时,可直接使用该后端连接。

这样,就降低了数据库代理与数据库建立连接的频率,从而减少了数据库主线程的开销。

连接建立的流程如下图所示。

对于会话级连接池,一个会话需要占用一个后端连接,直到会话结束才会释放后端连接到连接池,如下图所示。

无。

对于会话级连接池,在一个会话未结束之前,即便该会话处于闲置状态,没有事务需要处理,其后端连接也不能为其他会话使用,所以不能减少数据库的总连接数。

减少数据库上的总连接数。

开启事务级连接池后,当客户端发起连接会话请求时,只会先与数据库代理建立前端连接,代理不会马上将其与后端数据库建立连接;当需要处理请求时,从事务级连接池里查找是否存在可用的后端连接:

判断是否为可用后端连接的条件:user、dbname和部分系统变量的参数值是否一致。

若存在,则从连接池里直接获取后端并使用,并在当前事务结束后将该连接放回事务级连接池,方便下个请求继续使用。

若不存在,代理会与数据库创建一个新的后端连接。

减少与数据库建立连接的频率

减少与数据库的总连接数

多个进行中的会话共用了一个后端连接,避免了闲置连接(会话未结束,但前端连接为非活跃状态)对后端连接资源的占用,减少了数据库上的总连接数。

数据库代理本身并没有最大连接数的限制,连接数的限制是由后端数据库的规格决定。

执行以下操作时,连接将被锁定直至连接结束(即该连接不会再被放到连接池里供其他用户连接使用):

执行PREPARE语句或命令。

创建临时表。

修改用户变量。

大报文(例如16MB以上)。

使用LOCKTABLE。

多语句。

存储过程调用。

不支持FOUND_ROWS、ROW_COUNT和LAST_INSERT_ID函数的调用,这些函数可以调用成功,但是无法保证调用结果的正确性。其中:

1.13.11及以上的数据库代理版本支持在INSERT后直接使用SELECTLAST_INSERT_ID()语句,来保证查询结果正确性。

对于设置了wait_timeout的连接,wait_timeout在客户端的表现可能不会生效,因为每次请求都会从连接池中获取连接,当wait_timeout超时后,只有连接池中的后端连接会断开,而后端连接断开并不会导致客户端连接断开。

除了sql_mode、character_set_server、collation_server、time_zone这四个变量以外,如果业务依赖其他session级别的系统变量,那么需要客户端在建连之后显式执行set语句,否则连接池可能会复用系统变量已经被更改过的连接。

由于连接可能会被复用,您可以使用selectconnection_id()查询当前连接的threadid。

数据库代理会将所有节点上的showprocesslist结果合并后返回,在事务级连接池开启后,前端连接和后端连接的threadid无法对应。这导致kill命令可能会报错,但是实际上kill命令已经正常执行成功,可再通过showprocesslist确定相应的连接是否断开。

当前连接池功能不支持同一个账号对不同IP有不同的权限。如果您为同一个账号的不同IP设置了不同的库或者表权限,开通连接池可能会导致权限错误问题。例如,user@192.xx.xx.1设置了database_a的权限,而user@192.xx.xx.2没有database_a的权限,可能会导致连接复用时权限出错。

本文介绍的连接池功能是指RDSMySQL数据库代理的连接池功能,不影响客户端的连接池功能,如果您的客户端已经支持连接池,则可以不使用数据库代理的连接池功能。

连接池不能解决由于存在大量慢SQL,导致的连接堆积问题,建议自行优化SQL,或者在MySQL侧排查慢的原因。

当数据库代理内核小版本低于2.9.1时,读写属性为只读的连接地址不支持设置连接池。当数据库代理内核小版本为2.9.1及以上时,读写属性为读写和只读的连接地址均支持设置连接池。

在左侧导航栏,单击数据库代理。

在连接信息区域,您可以通过两种方法开启连接池:

默认关闭连接池。

修改连接池类型后,仅对新连接生效。

方法二:在目标代理连接地址操作列,单击修改配置,在弹出的对话框中,在连接池右侧选中目标连接池类型,即开启了对应类型的连接池。

如果原来已经开启了某类连接池,重新选择连接池类型,可修改类型。

API

描述

查询RDS实例的数据库代理详情。

查询RDS实例数据库代理的连接地址信息。

修改RDS实例数据库代理连接地址访问策略。

Q:连接数达到多少,建议开启连接池?

A:连接数如果可能超过MySQL数据库的连接数上限,建议开启事务级连接池。

A:10秒。

Q:使用连接池对实例性能有影响吗?

A:使用连接池后,短连接场景下,实例性能会有10%左右的提升。

Q:事务级连接池和会话级连接池的作用有何差异?

A:事务级连接池不仅可以减少MySQL数据库主线程的开销,还可以减少数据库上的总连接数。

会话级连接池只能减少MySQL数据库主线程的开销,不能减少数据库上的总连接数。

Q:事务级连接池和会话级连接池在工作原理上有何不同?

A:

会话是否可以共用后端连接

取后端连接的时机

把后端连接放回连接池的时机

会话与后端连接的映射关系

事务级

处理事务时

处理完一个事务(此时会话可能没结束)

N:1

会话级

建立会话时

会话结束

N:N

Q:数据库代理出现连接断开的问题,是否因为应用和数据库代理都用了连接池的功能?

A:连接断开的原因很多,需要根据具体情况分析,不一定是因为应用和数据库代理都用了连接池的功能。

THE END
1.web前后端交互过程1.前端和后端之间的基本交互过程 客户端发送请求:当用户在浏览器中访问一个网页时,浏览器会发送一个HTTP请求到服务器。这个请求包含了用户需要的信息,比如请求的页面URL、表单数据等。 服务器接收请求:服务器接收到客户端发送的请求后,会根据请求的URL和参数来确定应该由哪个后端程序处理。 https://www.jianshu.com/p/f381996b3d71
2.前后端分离架构模式讨论:要前后端分离,不要前后端分裂真正意义上的全栈开发,适合只在单一客户端上开发,一个人或者几个人的创业团队。前后端分离(情况一)...https://open.alipay.com/portal/forum/post/104001029
3.前端,后台,后端,前台他们区别是什么?小辣椒樱桃前台和后台都是在客户端或者浏览器上浏览者浏览的界面和管理者管理的界面 3.前端 这个是编程时候的概念,基本包括所有可见部分的代码编写,如果三层架构的话,可以看做是UI层. 4.后端 这个是对应前端而言的,编写的代码基本上都是提供给前端调用,而不需要处理UI的内容.例如逻辑层,或者存储过程. ...https://www.cnblogs.com/aaaazzzz/p/13023372.html
1.客户端和服务端?前端和后端解释?客户端和前端区别3、交互范围广:与前端、各类服务(第三方的API)、数据库等等多方向进行交互。 3、总结: 客户端通常指独立存在的应用程序,需要用户安装到设备上,而前端只需要和本机的浏览器交互就可展现给用户自己的内容;服务端通常指服务器上运行并处理客户端请求的部分代码,后端涵盖了整个后台系统,包含服务端代码、数据库、服务器...https://blog.csdn.net/m0_61443153/article/details/139855312
2.全面讨论后端前端客户端的区别全面讨论 后端、前端、客户端的区别 帖子背景 楼主看到今年不少友友暑期实习都或多或少,被客户端岗位打捞起来面试;也有很多友友本来是投的后端,结果拿了客户端的offer,不知道改不改转客户端。 楼主之前在字节的CapCut做过半年的客户端开发实习生,对客户端有一个基本的了解,再加上后端楼主也实习过,所以两个方向...https://www.nowcoder.com/discuss/616306212254015488
3.服务端前端客户端后端有什么区别–PingCode以上就是关于服务端,前端,客户端,后端的区别的内容了,希望对大家有帮助。https://docs.pingcode.com/docs.pingcode.com/ask/21715.html
4.一文读懂微前端架构从前后端责任分层来看,可以从前端或者后端来实现。 通过客户端框架来实现 微前端通常由客户端工具来支持实现(听上去好有道理),有许多支持客户端开发微前端的实现工具,包括:Piral,Open Components,qiankun,Luigi,Frint.js等。其中qiankun是蚂蚁金服开发的。 https://www.51cto.com/article/662822.html
5.uniapp操作数据库的三种方法总结javascript技巧前端与后端(云端)结合实现客户端操作数据库 3.使用DB Schema结构规范实现客户端对数据库的操作 第一步: 我们线在数据库中创建一个数据表。 第二步: 在uniCloud中的database中右键,后选择下载所有DB Schema及扩展校验函数。 等在下载完毕后我们会发现 我们的数据表:News_system已经在database中。 第三步: 然后...https://www.jb51.net/javascript/2852121qf.htm
6.谈谈前后端分离模式的弊端大家把这个架构图和上面前后端分离的架构图比较一下,会发现目前的前后端分离架构实际上是将原来客户端client干的活,拆分到前端应用,后端应用两部分来干了。这就是说经历了轰轰烈烈,将近20年的web开发,或者叫bs开发以后,整个开发模式又大规模回归到了基于浏览器的cs开发模式。 https://maimai.cn/article/detail?fid=1275684870&efid=CwIElLg05QO0MaTkG_RZmQ
7.@所有人春风送岗:有一种心安一一家门口就业澎湃号·政务1、负责前端研发工作,主要包括前端客户端方向,覆盖后台web应用、智能建站、数据可视化等方向; 2、参与并主导团队前端工程化体系建设,逐步提升研发效率、研发质量, 3、与产品经理、设计师、后端工程师一起,提升产品的用户体验,打造卓越的互联网产品; 4、把握前端技术发展潮流,负责牵头落地前沿技术,推动业务的发展。 https://www.thepaper.cn/newsDetail_forward_11203752
8.APIJSON.NET:后端接口和文档自动化,前端(客户端)定制返回JSON的...这是APIJSON 的 C# .NET CORE 版后端实现。APIJSON 码云最有价值开源项目后端接口和文档自动化,前端(客户端) 定制返回JSON的数据和结构!English 通用文档 视频教程 在线工具 APIJSON是一种专为API而生的 JSON网络传输协议 以及 基于这套协议实现的ORM库。为 简单的增删改查、复杂的查询、简单的事务操作...https://gitee.com/liaozb/APIJSON.NET
9.后端测试和前端测试的区别后端测试是对服务器端应用程序进行测试,例如 API 接口、数据库操作等。后端测试需要掌握服务器端编程语言(如 Java、Python、PHP 等)、数据库等相关技术,主要关注服务器端的逻辑、性能和安全性。 前端测试则是测试应用程序的客户端部分,即用户界面、页面布局、交互设计、功能实现等,需要掌握 HTML、CSS、JavaScript 等...https://www.hxsd.com/content/31353/