更新时间:2025-08-13 GMT+08:00

设置事务拆分

操作背景

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

原理介绍

数据库代理提供事务拆分的功能,能够将事务内写操作之前的读请求转发到只读实例,降低主实例负载。

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

  • 未开启事务拆分

    未开启事务拆分时,事务中的所有请求均会路由到主节点以保障事务读写一致性。

  • 开启事务拆分

    开启事务拆分后,代理会将事务中第一个写前的读请求分发到只读节点,从而减轻主节点的负载。

注意事项

  • 某些业务对全局一致性有要求,开启事务拆分后将不满足全局一致性,因此在开启事务拆分前请评估事务拆分功能是否适用于您的业务。
  • 代理实例的状态必须均为“正常”。
  • 开启事务拆分时,需要将代理更新至最新版本,新版本优化了事务的处理逻辑。
  • 开启事务拆分后,使用BEGIN提交事务后的读请求暂时不支持拆分到读库。

设置事务拆分

  1. 单击管理控制台左上角的,选择区域。
  2. 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
  3. 在实例列表中,单击只读实例所在的主实例名称,进入主实例的“概览”页面。
  4. 在左侧导航栏中,单击“数据库代理”
  5. 在“数据库代理”页面,单击“事务拆分”后的
  6. 在弹框中单击“确认”,开启事务拆分。