备机事务内透明写转发
可获得性
本特性自openGauss 5.1.0版本开始引入,仅适用于资源池化架构。
特性简介
本特性是在传统主备架构下的备机事务写转发特性基础上,在资源池化架构下进行的特性增强。传统架构下的备机写转发特性是只要在备机上有开启事务操作,会将整个事务全部转发给主机。通过该特性,在资源池化架构下的备机上,如果开启了写转发,且备机上有开启事务的操作,会将事务中的读请求放到备机本地执行,写请求转发到主节点执行。
客户价值
在资源池化架构下,集群对外体现是支持多节点同时写入的功能效果。当主备节点并发操作的数据冲突较少时,提升集群整体性能的线性比。
特性描述
本特性依赖备机支持写特性。在资源池化架构下,当开启备机支持写特性后,备机上执行的显式事务(即begin,end包围的sql),数据库会自动将事务中的涉及修改的写SQL语句转发给主机, 而事务中的读语句仍然在备机本地执行。
特性增强
本特性是在传统主备架构下的备机事务写转发特性基础上,在资源池化架构下进行的特性增强。
特性约束
- 在资源池化架构下,当开启备机支持写特性后,备机启动事务后会将事务中的涉及修改的写SQL语句转发给主机, 事务中的读语句仍然在备机本地执行。
- 在资源池化架构下,当开启备机支持写特性后,备机不支持事务内包含有DDL语句和LOCK语句,遇到这种情况会报错。
- 在资源池化架构下,当开启备机支持写特性后,如果事务内包含子事务,那么事务内的读也会转发到主。
- 在资源池化架构下,当开启备机支持写特性后,如果是游标类操作,会统一全部转发给主,包括游标。
- 在资源池化架构下,当开启备机支持写特性后,COPY类型的语句不会转发到主机执行,即COPY TO类型的命令可以在备机上执行成功,COPY FROM类型的命令会正常报错。
- 在资源池化架构下,当开启备机支持写特性后,不会因为备机支持了写转发而改变外围工具的执行行为,比如gs_dump/gs_dumpall/gs_probackup/pg_recvlogical之类的命令,依然会按照原有的逻辑报错支持或者不支持。
- 在资源池化架构下,当开启备机支持写特性后,备机不支持不在显式事务块内的存储过程/函数/自治事务/Package的调用。如果需要调用存储过程/函数/自治事务/Package,需要在显式的事务块中,且以call xxx的方式去使用。例如:
openGauss=# begin; BEGIN openGauss=# call pck1.p1(); INFO: rowcount: 1 INFO: (2,200,var2,clob2,1234ABD2,text2) INFO: rowcount: 2 p1 ---- 1 (row) openGauss=# end; COMMIT
依赖关系
本特性依赖备机写转发的特性。
基本原理
本特性的基本原理是:当在资源池化架构下,启用本特性后,如果通过gsql或其他驱动连接到备机上,并在备机上执行事务操作时(即开启一个事务),备机内部会同时与主机建立连接,并向主机同步发送开启事务的操作。如果该事务中执行的操作是只读类型的SQL语句(即SELECT
语句),该语句只会在备机本地执行;如果事务中执行的操作是写类型的语句(即IUD(Inert/Update/Delete)
语句)时,该语句会转发给主机执行,备机负责接收结果并透传给上层业务。如果该事务中包含DDL
类型的操作时,会报错不支持在备机侧执行。
使用指导
使用该特性需要在集群中所有节点配置GUC配置项enable_remote_execute = on
,详细配置方法可参考备机支持写语句参数。配置完成并重启数据库使其生效后,通过gsql或其他驱动连接到备机上,并在备机上执行包含写类型语句的事务操作,观察在备机上执行是否正常即可。
使用场景
该特性的使用场景为:在资源池化下,需要将部分写操作的业务分散到集群中的备节点上执行时。