全部产品
Search
文档中心

云数据库 RDS:设置事务拆分

更新时间:Apr 07, 2025

RDS MySQL的数据库代理提供事务拆分功能,该功能在保证业务中读写一致性的前提下,能够将事务内第一个写请求之前的读请求转发到只读实例,降低主实例负载。本文介绍如何设置事务拆分。

前提条件

已开通数据库代理

背景信息

默认情况下,RDS MySQL的数据库代理会将事务内的所有请求都发送到主实例以保障事务的正确性,但是某些框架会将所有请求封装到非自动提交的事务中(通过执行set autocommit=0;关闭自动提交),导致主实例负载过大,如下图所示。

image.png

为了解决上述问题,可以使用数据库代理的事务拆分(默认开启)功能。您不需要改动应用的代码或配置就可以将事务中的读压力从主节点转移到只读节点,从而提高主节点的稳定性。

开启事务拆分后,在默认的Read Committed隔离级别下,当RDS MySQL关闭事务自动提交后,仅会在发生写操作时才正式开启事务,正式开启事务前的读请求会通过负载均衡模块分流至只读实例。

说明

2024年07月31日及之后创建的实例显式事务(例如begin或者start transaction)默认支持拆分,2024年07月31日之前开通的实例仅支持拆分隐式开启的事务。

路由逻辑示例(关闭自动提交,隐式开启的事务):

SQL类型

路由至

备注

SELECT

只读实例

事务内写前读。

SELECT

只读实例

事务内写前读。

UPDATE / INSERT / DELETE

主实例

事务首次写操作(开启事务)。

SELECT

主实例

事务内写后读。

UPDATE / INSERT / DELETE

主实例

写操作。

SELECT

主实例

事务内写后读。

COMMIT

主实例

事务提交阶段。

开启或关闭事务拆分

开通数据库代理后,事务拆分默认开启,您可以根据需求随时关闭或开启事务拆分功能。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

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

  3. 连接信息区域,在目标代理连接地址的操作列,单击修改配置

  4. 在弹出的对话框中,单击事务拆分右侧的开启关闭

    说明

    开通或关闭事务拆分后仅对新连接生效。

相关API

API

描述

DescribeDBProxy

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

DescribeDBProxyEndpoint

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

ModifyDBProxyEndpoint

修改RDS实例数据库代理的代理终端设置。