
# 设置事务拆分
#### 操作场景
默认情况下，云数据库 RDS for MySQL数据库代理会将事务内的所有请求都发送到主实例以保障事务的正确性，但是某些框架会将所有请求封装到非自动提交的事务中（通过set autocommit=0;关闭自动提交），导致主实例负载过大。
数据库代理提供事务拆分的功能，能够将事务内写操作之前的读请求转发到只读实例，降低主实例负载。
事务拆分功能**默认关闭**，开启事务拆分后，在默认的Read Committed隔离级别下，当云数据库RDS for MySQL关闭事务自动提交后，仅会在发生写操作时才正式开启事务，正式开启事务前的读请求会通过负载均衡模块分流至只读实例。
#### 原理介绍
- 未开启事务拆分 未开启事务拆分时，事务中的所有请求均会路由到主节点以保障事务读写一致性。
  ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002383684429.png "点击放大")
  
- 开启事务拆分 开启事务拆分后，代理会将事务中第一个写前的读请求分发到只读节点，从而减轻主节点的负载。
  ![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002350083732.png "点击放大")
  
 
#### 注意事项
- 设置事务拆分需要满足数据库代理内核版本为2.3.9.5及以上。
- 仅"READ-UNCOMMITTED"和"READ-COMMITTED"事务隔离级别的会话生效事务拆分。
- 仅读写模式的数据库代理支持事务拆分功能。
- 当事务拆分功能开启后，仅支持将事务隔离级别修改为"READ-UNCOMMITTED"或"READ-COMMITTED"，若需要将事务隔离级别修改至更高的级别，需要关闭事务拆分功能。
- 开启事务拆分后，使用BEGIN提交事务后的读请求暂时不支持拆分到只读库。
 
#### 设置事务拆分
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002593882307.png)，选择区域。
3. 在实例列表中，单击只读实例所在的主实例名称，进入主实例的"概览"页面。
4. 在左侧导航栏中，单击"数据库代理"。
5. 在"数据库代理"页面，单击"事务拆分"后的![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002212064256.png)。
6. 在弹框中单击"是"，开启事务拆分。
7. 在"数据库代理"页面，查看事务拆分已开启。 
   - 如需关闭事务拆分，可单击![](https://support.huaweicloud.com/usermanual-rds-mysql/zh-cn_image_0000002625070009.png)进行关闭。
   
   - 开启或关闭事务拆分后仅对新连接生效。
   
   
   
   
 
