更新时间:2026-07-28 GMT+08:00
分享

分布式GTM-FREE备机读

分布式GTM-FREE模式通过备机提供弱一致性读能力,有效降低主机负载。

在分布式场景下,CN内置的收集线程持续向主节点(DN)及备节点(DN)采集CSN与提交时间(commit time),用于校验备机节点的CSN值与事务延迟是否满足预设阈值,从而筛选出符合条件的备DN将部分读请求下发执行。

CN的收集线程定期汇总各备机的maxcsn值与commit time,并记录至CN缓存中,流程如图1所示:

图1 CN收集线程

当执行查询时,基于采集的DN最新commit time数据,需同时满足standby_read_delay与standby_read_rto参数约束,针对每个分片独立筛选可用备机。查询请求将下发至选定备节点,由备机基于本地快照执行查询操作。若所有分片均无可用备机,则直接在CN层抛出异常并终止请求。

GTM-FREE备机读流程如图2所示。

图2 GTM-FREE备机读流程

GTM-FREE备机读机制仅校验各分片备机相对于分片主机的延迟指标,不保证各个分片均使用同一全局事务号进行读操作,因此无法实现瞬时一致性。该方案提供最终一致性保障,即当查询涉及的所有表在所有分片完成日志回放后,备机查询结果将与主机读操作保持完全一致。

特性约束

  1. 读到的数据与主机存在一定延时,主备差异超过指定数值(由standby_read_delay指定)时,会报错。
  2. 提供弱一致读,仅保证session内部的快照递增序,session之间不保证。
  3. 不支持stream计划,开启enable_stream_operator参数后,备机读会采用pgxc计划替代stream计划。
  4. 不支持备机间的负载均衡。
  5. 主机性能和RTO优先,备机读业务其次。在没有可用备机时均会报错,备机读的查询不会发送到主机上。
  6. 备机读业务会影响备机RTO,若所有备机的RTO都超过指定阈值(通过standby_read_rto指定),备机读业务报错,业务侧通过查看错误码进行熔断。
  7. 允许GTM-Free模式下gsql直接连接备机。

相关文档