
# 分布式GTM-FREE备机读
分布式GTM-FREE模式通过备机提供弱一致性读能力，有效降低主机负载。
在分布式场景下，CN内置的收集线程持续向主节点（DN）及备节点（DN）采集CSN与提交时间（commit time），用于校验备机节点的CSN值与事务延迟是否满足预设阈值，从而筛选出符合条件的备DN将部分读请求下发执行。
CN的收集线程定期汇总各备机的maxcsn值与commit time，并记录至CN缓存中，流程如[图1]所示：
图1CN收集线程   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620640367.png "点击放大")
当执行查询时，基于采集的DN最新commit time数据，需同时满足standby_read_delay与standby_read_rto参数约束，针对每个分片独立筛选可用备机。查询请求将下发至选定备节点，由备机基于本地快照执行查询操作。若所有分片均无可用备机，则直接在CN层抛出异常并终止请求。
GTM-FREE备机读流程如[图2]所示。
图2GTM-FREE备机读流程   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002590200726.png "点击放大")
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
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直接连接备机。
 
