[增强] 写出流控可以将被挤压的商店变成读取非领跑者读取的热点
** 范围:** 只有实际印发** 非领导人员的工作量为**(后面改为/ stale为/) “ReplicaReadMixed”/“ReplicaReadPreferLeader”)。 只有领导者读取 —— 默认 —— 商店保存 接收相同的读取流量,但这个问题不会发生;见根源(2)。
□ 凤凰
当一个商店的写流控制被踢入( 超过软限的“ 等待 compaction bytes ”) 时, 该商店 虽然读数从未退化,
- 非领头人读取开始避开商店,所以其被测量的读取负载倒塌——尽管 存储正常读取。
- PD的热读排程器按测量读载量排列商店,所以商店现在看起来最冷了.
并成为目的地:
转移-热读-领导'/移动-热读-领导'/ " 热读 " 读取热点, " 热读 " 读取 " 也创造了新的 " 热读 " 。 复制品** 在那里。 - 当收缩物追上来并停止收缩时,商店立即受到所有冲击,并有可能是 由读取流量饱和.
净效应: 一种** write - only ** 降解生成一个** read ** 热点在同一商店上——但只用于 其阅读流量有资格从领导者手中转移出去的工作量。
□ 根源
** TiKV——拒绝只写,没有等待估计。 ** 流量控制器的“ should drop( ) ” (“ src/ storage/txn/ flow controller/ singleton flow controller.rs” ) 仅在“ 需要 flow control() ” 属实时才拒绝“ run cmd” 中的命令, 即 。
只读优先'!=高'-读绝不被如此拒绝。 错误是 'errorpb:ServerIs Busy {原因:"排班人很忙" 与"估计"同为"等". ( " src/ storage/errors.rs " ; 节流阀等待路径返回" 已超过死线 " ) 也为 0。客户-去——书面拒绝成为全店范围的惩罚,只有非领导才能采取行动。 ** 在
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从来不认为它是冷。
- **PD -- -- 测得倒塌, . . . . . . .
内容来源: tikv/tikv