背景信息
当应用程序连接PolarDB-X 1.0实例执行操作时,从PolarDB-X 1.0实例的角度看,会有如下两种类型的连接:
- 前端连接:由应用程序建立的,到PolarDB-X 1.0计算资源DRDS实例中逻辑库的连接。
- 后端连接:由PolarDB-X 1.0计算资源DRDS实例中的节点建立的,到后端PolarDB-X 1.0存储资源RDS实例(即私有定制RDS实例)中物理库的连接。
前端连接
前端连接的数量理论上仅受限于PolarDB-X 1.0计算资源DRDS实例节点可用的内存大小和网络连接数。但在实际的应用场景中,应用程序连接到PolarDB-X 1.0计算资源DRDS实例时,通常会管理有限数量的连接来执行请求的操作,并不会维持很高并发量的持久化长连接(如数万个并发的长连接),因此可认为PolarDB-X 1.0实例能接受的前端连接数量是无限制的。
由于前端连接数量不受限制,可以允许有大量空闲连接存在,因此适用于业务端部署应用程序的服务器数量较多,需要同时保持连接到PolarDB-X 1.0实例的场景。
虽然前端连接的数量可被认为是无限制的,但从前端连接获取的操作请求是由PolarDB-X 1.0计算资源DRDS实例的内部线程通过后端连接实际执行,而内部线程和后端连接的数量有限,因此PolarDB-X 1.0实例处理请求的整体并发度是有限的。
后端连接
PolarDB-X 1.0计算资源DRDS实例的每个节点内部都会创建后端连接池,自动管理和维护到私有定制RDS实例中物理库的后端连接。因此,PolarDB-X 1.0实例中后端连接池的最大连接数与私有定制RDS实例支持的最大连接数直接相关。您可以参照以下公式来计算PolarDB-X 1.0实例中后端连接池的最大连接数。
PolarDB-X 1.0实例后端连接池的最大连接数 = 向下取整(私有定制RDS实例最大连接数 / 私有定制RDS实例物理分库数 / PolarDB-X 1.0实例节点数)
例如,某用户搭配购买了以下规格的私有定制RDS实例和PolarDB-X 1.0实例。
- 1个私有定制RDS实例,包含8个物理分库,规格为通用型4核16 GB,最大连接数为4000。
- 1个PolarDB-X 1.0计算资源DRDS实例,规格为标准版16核64 GB(每4核16 GB为1个节点,即该实例包含4个节点)。
按照上述公式可计算出PolarDB-X 1.0实例中后端连接池的最大连接数。
PolarDB-X 1.0实例后端连接池的最大连接数 = FLOOR(4000 / 8 / 4) = FLOOR(125) = 125
说明
- 上述公式计算的结果为PolarDB-X 1.0实例中后端连接池的最大连接数的上限。实际使用中,为了减轻私有定制RDS实例的连接压力需要留出一定的缓冲余地,PolarDB-X 1.0实例会适当调整后端连接池的最大连接数,使其小于上限值。
- 建议每个PolarDB-X 1.0实例中的数据库都创建在独立的私有定制RDS实例上,而不要和其它用或其它PolarDB-X 1.0实例的数据库共享1个私有定制RDS实例。
前、后端连接的关系
在应用程序与PolarDB-X 1.0计算资源DRDS实例建立了前端连接并发出SQL语句的执行请求后,PolarDB-X 1.0计算资源DRDS实例节点会异步地处理请求,并通过内部后端连接池获取后端连接,在一个或多个物理库上执行经过优化处理的SQL语句。
PolarDB-X 1.0计算资源DRDS实例节点内部为异步的处理流程,前端连接和后端连接之间并无绑定关系。在通常的短事务和简单查询情况下,少量的后端连接有能力处理并发量较高的前端连接所带来的大量请求。这也是在PolarDB-X 1.0中应关注QPS指标而非并发连接数的原因。
虽然前端连接数量可被认为近乎无限制,但PolarDB-X 1.0计算资源DRDS实例节点内部的后端连接池所维护的最大连接数是有限的(原因见后端连接),因此在实际的应用场景中,需要注意以下几点:
- 应用程序中应尽量避免长事务(亦称为大事务),以免其长时间未提交或回滚而占用后端连接,造成后端连接池达到上限,降低整体的并发处理能力,增加响应时间。
- 应监控并优化或消除在PolarDB-X 1.0中执行的慢查询,以免其长时间执行而占用后端连接,造成后端连接池紧张或达到上限。这种情况下PolarDB-X 1.0计算资源DRDS实例或私有定制RDS实例会面临更大的处理压力,导致整体的并发处理能力下降,增加响应时间。严重时可能还会因为执行超时导致SQL执行失败率上升。
说明 若在正常使用连接和执行查询的情况下,后端连接数仍然达到了PolarDB-X 1.0实例中后端连接池的最大连接数,请提交工单联系技术支持。