PolarDB提供了事务拆分功能,旨在保证业务中读写一致性的前提下,将事务中读请求发送到只读节点,以减轻主节点的压力。
背景信息
当您使用PolarDB O引擎可读可写模式集群地址时,读写请求会由代理(Proxy)分发到主节点和只读节点。为了保证一个会话连接中事务读写一致性,代理会将这个会话中所有在事务中的请求都发送到主节点。
例如,某些数据库客户端驱动(例如JDBC)默认将请求封装在事务中,因此应用的请求都会被发送到主节点,导致主节点压力大,而只读节点几乎没有压力,如下图所示。

为了解决上述问题,PolarDB提供了事务拆分功能,旨在保证业务中读写一致性的前提下,将事务中读请求发送到只读节点,以减轻主节点的压力。
功能介绍
事务拆分基础服务
代理会将事务中第一个写请求前的读请求发送到只读节点,从而减轻主节点的负载,由于事务中未提交(COMMIT)的数据在只读节点上处于不可见的状态,为了保障事务中读写一致性,第一个写请求后的所有读写请求仍路由到主节点。如需开启事务拆分基础服务,请参见配置数据库代理。

功能优势
不需要改动应用的代码或配置就可以将事务中的读压力从主节点转移到只读节点,从而提高主节点的稳定性。
注意事项
- 仅支持对读已提交(Read Committed)事务隔离级别的事务拆分。
- 对于事务拆分基础服务,如果一致性级别不是最终一致性,只有只读节点与主节点数据同步成功后,事务中第一次写请求前的读请求才会发送到只读节点,否则依旧发送到主节点。关于一致性级别的具体信息,请参见一致性级别。
相关API
API | 描述 |
---|---|
ModifyDBClusterEndpoint | 修改PolarDB的集群地址属性,包括读写模式、新节点是否自动加入本地址、一致性级别、事务拆分、主库不接受读等。 |