PingKai Logo下载

Follower Read

本章将介绍使用 Follower Read 在特定情况下加速查询的方法。

简介

在 TiDB 当中,数据是以 Region 为单位,分散在集群中所有的节点上进行存储的。一个 Region 可以存在多个副本,副本又分为一个 leader 和多个 follower。当 leader 上的数据发生变化时,TiDB 会将数据同步更新到 follower。

默认情况下,TiDB 只会在同一个 Region 的 leader 上读写数据。当系统中存在读取热点 Region 导致 leader 资源紧张成为整个系统读取瓶颈时,启用 Follower Read 功能可明显降低 leader 的负担,并且通过在多个 follower 之间均衡负载,显著地提升整体系统的吞吐能力。

何时使用

优化读热点

你可以通过以下可视化的方法分析你的应用程序是否存在热点 Region。

如果发现确实存在热点问题,你可以参考 TiDB 热点问题处理文档进行排查,以便从应用程序层面上避免热点的产生。

如果读取热点的确无法避免或者改动的成本很大,你可以尝试通过 Follower Read 功能将读取请求更好地负载均衡到 follower region。

优化跨数据中心部署的延迟

如果 TiDB 集群是跨地区或跨数据中心部署的,一个 Region 的不同副本分布在不同的地区或数据中心,此时可以通过配置 Follower Read 为 closest-adaptiveclosest-replicas 让 TiDB 优先从当前的数据中心执行读操作,这样可以大幅降低读操作的延迟和流量开销。具体原理可参考 Follower Read

开启 Follower Read

在 SQL 中,你可以将变量 tidb_replica_read 的值(默认为 leader)设置为 followerleader-and-followerprefer-leaderclosest-replicasclosest-adaptive 开启 TiDB 的 Follower Read 功能:

SET [GLOBAL] tidb_replica_read = 'follower';

你可以通过 Follower Read 使用方式了解该变量的更多细节。

扩展阅读