更新时间:2026-07-28 GMT+08:00
特性概述
功能定义
开启备机读功能后,备机将支持只读事务并满足数据一致性要求,有效缓解主机负载压力。
用户场景
系统需处理高并发访问请求,同时要求高可靠性与可用性,通常部署多个副本。通过设置数据库备机为可读模式,可以将部分查询请求分散到备机上执行,降低主数据库负载,充分利用备机硬件资源,减少硬件投入成本。
快速启动
- 配置备机读功能需启用参数:hot_standby=on;GTM_LITE模式需激活:auto_csn_barrier=on。
- 通过gsql方式连接数据库:
gsql -d {DB_NAME} -p {DB_PORT} -h {DB_HOST} ...- DB_NAME:数据库名。
- DB_PORT:数据库CN节点port。
- DB_HOST:数据库CN节点host。
在单集群模式及容灾部署主集群CN上,建立连接后执行以下会话配置开启会话级备机读。
SET enable_standby_read=on;
容灾部署、灾备集群环境中禁止执行该配置,会话建立后即默认开启容灾读功能。
- 通过JDBC方式连接数据库:
enableStandbyRead:连接CN后启用备机读操作,需配合参数配置生效。
容灾读场景(灾备集群)配置:
jdbc:gaussdb://node1:port,node2:port,node3:port/database?isasterToleranceCluster=true&autoBalance=true
- disasterToleranceCluster:启用后自动判断目标集群是主集群还是灾备集群;配置IP需指向目标集群CN的IP。
- autoBalance:表示开启负载均衡。
- true/balance/roundrobin:表示开启JDBC负载均衡功能,将应用程序的多个连接均衡分配至数据库集群中的各个可用CN。
- priorityn:表示开启JDBC优先级负载均衡功能,将应用程序的多个连接均衡到URL中前n个可用的CN数据库节点。
- shuffle:表示开启JDBC随机负载均衡功能,将应用程序的多个连接随机均衡到数据库集群中的各个可用CN。
- specified:表示开启JDBC负载均衡功能,并且只在用户URL中指定的节点上建立连接。
- shufflen:表示开启JDBC在指定节点上优先随机负载均衡功能,将应用程序的多个连接优先随机分配至URL中前n个可用的CN数据库节点。当URL上配置前n个节点全部不可用时,连接会随机分配至其他可用CN节点。
- false:表示不开启JDBC负载均衡功能和优先级负载均衡功能。
灾备集群启用分布式容灾读模式时,不可配置enableStandbyRead=on,否则请求将被拦截。
规格约束
- 备机读性能与硬件规格、I/O负载及实际业务高度相关,不同的业务场景下备机读性能差异较大。
- 典型商用场景(大表300GB + 主机带100并发UPDATE + VACUUM,主备200并发读且I/O、CPU资源未出现瓶颈):
- 只读操作不阻塞DML日志回放,主备时延可控制在1秒内。
- 只读会阻塞DDL等修改系统表操作的日志回放,冲突发生时达到max_standby_streaming_delay阈值将终止查询。
- 打开极致RTO只读场景时,只读操作阻塞部分DDL回放但不影响DML;需额外分配内存/磁盘资源缓存历史数据,查询时长受存储空间限制。
- 主备切换、备机异常重启或备机加回/加副本后,需回放至上次的读位置,方可支持备机读。
- enable_standby_read参数不支持在事务块和存储过程中启用。
- 分布式备机读不支持自治事务功能。
- 当开启极致RTO后执行删除文件的DDL操作时,备机会延迟删除相关文件,从而导致备机数据目录下的文件数目多于主机。此时若查询主备机数据库大小,将会显示备机数据库大于主机数据库。
- 开启极致RTO备机读后,仅支持可重复读隔离级别,设置其他隔离级别不会报错但不生效。
- 备机读不支持临时表;由于临时表不记录Xlog日志导致数据无法同步至备机,备机读不支持临时表的读操作。
父主题: 备机读