如果您的业务框架将所有请求都封装到非自动提交的事务中,导致主实例负载过大,您可以开通RDS PostgreSQL的数据库代理功能,该功能默认支持事务拆分,能够在保证业务中读写一致性的前提下,将事务内写操作发生之前的读请求转发到只读实例,降低主实例负载。
前提条件
已开通数据库代理服务,具体请参见开通数据库代理。
功能说明
默认情况下,RDS PostgreSQL的数据库代理会将事务内的所有请求都发送到主实例以保障事务的读写一致性。但是某些框架会将所有请求封装到非自动提交的事务中,导致主实例负载过大,而只读实例几乎没有压力。
为了解决上述问题,您可以使用数据库代理的事务拆分功能。您不需要改动应用的代码或配置就可以将事务中的读压力从主实例转移到只读实例,从而提高主实例的稳定性。
开启数据库代理后(数据库代理的事务拆分功能默认开启),在默认的Read Committed隔离级别下,当RDS PostgreSQL关闭事务自动提交后,仅会在发生写操作时才正式开启事务,正式开启事务前的读请求会通过负载均衡模块分流至只读实例。
说明
数据库代理的事务拆分功能默认开启。暂不支持关闭。
显式事务(例如
begin
或者start transaction
)暂时不支持拆分。某些业务对全局一致性有要求,开启事务拆分后将不满足全局一致性,因此在开启数据库代理前请评估事务拆分功能是否适用于您的业务。
相关API
API | 描述 |
查询数据库代理详情。 | |
查询数据库代理的连接地址信息。 |