TiFlash的一致性读怎么理解?读取的是最新数据吗?是基于什么原理实现的?

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】 场景 + 问题概述

【应用框架及开发适配业务逻辑】

【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

一致性

TiFlash 提供与 TiKV 一样的快照隔离支持,且保证读取数据最新(确保之前写入的数据能被读取)。这个一致性是通过对数据进行复制进度校验做到的。

每次收到读取请求,TiFlash 中的 Region 副本会向 Leader 副本发起进度校对(一个非常轻的 RPC 请求),只有当进度确保至少所包含读取请求时间戳所覆盖的数据之后才响应读取。

读取的是符合你当前隔离级别的数据。
会从TiKV拉取数据,然后读取符合你隔离级别的正确的数据。

就是说会有一个复制进度的校对,如果延迟较大就不会走TiFlash

看参数设置决定
https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_allow_fallback_to_tikv-从-v50-版本开始引入