RDS MySQL的数据库代理提供事务拆分功能,该功能在保证业务中读写一致性的前提下,能够将事务内第一个写请求之前的读请求转发到只读实例,降低主实例负载。本文介绍如何设置事务拆分。
关于RDS数据库代理的使用问题和更多相关信息,欢迎加入用户钉钉群(106730000316)进行咨询、反馈和交流 。
前提条件
背景信息
默认情况下,RDS MySQL的数据库代理会将事务内的所有请求都发送到主实例以保障事务的正确性,但是某些框架会将所有请求封装到非自动提交的事务中(通过执行set autocommit=0;
关闭自动提交),导致主实例负载过大,如下图所示。
为了解决上述问题,可以使用数据库代理的事务拆分功能。您不需要改动应用的代码或配置就可以将事务中的读压力从主节点转移到只读节点,从而提高主节点的稳定性。
开启事务拆分后,在默认的Read Committed隔离级别下,当RDS MySQL关闭事务自动提交后,仅会在发生写操作时才正式开启事务,正式开启事务前的读请求会通过负载均衡模块分流至只读实例。
数据库代理的事务拆分功能默认开启。
显式事务(例如begin或者start transaction)暂时不支持拆分。
某些业务对全局一致性有要求,开启事务拆分后将不满足全局一致性。因此,在开启事务拆分前请评估事务拆分功能是否适用于您的业务。
开启或关闭事务拆分
您可以根据需求随时关闭或开启事务拆分功能。
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏,单击数据库代理。
在连接信息区域,在目标代理连接地址的操作列,单击修改配置。
在弹出的对话框中,单击事务拆分右侧的开启或关闭。
说明开通或关闭事务拆分后仅对新连接生效。
相关API
API | 描述 |
查询RDS实例的数据库代理详情。 | |
查询RDS实例数据库代理的连接地址信息。 | |
修改RDS实例数据库代理的代理终端设置。 |