#20076·tikv

[增强] 写出流控可以将被挤压的商店变成读取非领跑者读取的热点

作者: mayjiang0203创建于 2026年9月11日更新于 2026年9月11日
标签type/enhancementcontribution

** 范围:** 只有实际印发** 非领导人员的工作量为**(后面改为/ stale为/) “ReplicaReadMixed”/“ReplicaReadPreferLeader”)。 只有领导者读取 —— 默认 —— 商店保存 接收相同的读取流量,但这个问题不会发生;见根源(2)。

□ 凤凰

当一个商店的写流控制被踢入( 超过软限的“ 等待 compaction bytes ”) 时, 该商店 虽然读数从未退化,

  1. 非领头人读取开始避开商店,所以其被测量的读取负载倒塌——尽管 存储正常读取。
  2. PD的热读排程器按测量读载量排列商店,所以商店现在看起来最冷了. 并成为目的地:转移-热读-领导'/移动-热读-领导'/ " 热读 " 读取热点, " 热读 " 读取 " 也创造了新的 " 热读 " 。 复制品** 在那里。
  3. 当收缩物追上来并停止收缩时,商店立即受到所有冲击,并有可能是 由读取流量饱和.

净效应: 一种** write - only ** 降解生成一个** read ** 热点在同一商店上——但只用于 其阅读流量有资格从领导者手中转移出去的工作量。

□ 根源

  1. ** TiKV——拒绝只写,没有等待估计。 ** 流量控制器的“ should drop( ) ” (“ src/ storage/txn/ flow controller/ singleton flow controller.rs” ) 仅在“ 需要 flow control() ” 属实时才拒绝“ run cmd” 中的命令, 即 。 只读优先'!=高'-读绝不被如此拒绝。 错误是 'errorpb:ServerIs Busy {原因:"排班人很忙" 与"估计"同为"等". ( " src/ storage/errors.rs " ; 节流阀等待路径返回 " 已超过死线 " ) 也为 0。

  2. 客户-去——书面拒绝成为全店范围的惩罚,只有非领导才能采取行动。 ** 在OnServerIsBusy' (内部/租赁/replica selector.go')中,估计-等待-ms!=0'分支 区分为isReadReq(req.Type)',但0'分支——唯一的流量控制错误 使用 - 拨打ctx.Store.health Status.mark AlreadySlow ()',而不论请求类型。 这把针 共享“ Store” 对象的客户端慢分数到最大 。

得分只有门** 非领队** 复制品选择:

  • '如果!r.store.health Status. IsSlow () {在混合策略中得分 {glag NotSlow } 使用 追随者 / 混合 / stale / 偏好领跑者 ;
  • 在偏好领头人,非领头人复制 在一个缓慢的商店被直接跳过。

** leader Candidate ' 不参考IsSlow', 领袖读取的分流路径还需要 " 估计等待时间 " 或 " 服务器BusyFlag " ,两者均无要求。 流控错误集。 所以,与默认领导读 商店不断得到相同的读取 交通堵塞,没有读取量崩溃发生, 和PD从来不认为它是冷。

  1. **PD -- -- 测得倒塌, . . . . . . .