pd 调度的几个问题

1、pd的几个balance-schedule 调度速度后几个*schedule-limit参数影响,以下是上述限制生效的逻辑不知道是否准确:
scheduler在达到每个interval后通过AllowSchedule和其他一些限制判断是否产生调度,而AllowSchedule是判断schedule的OperatorControllor中等待队列中operator的数量是否小于schedule-limit参数设置,如果小于则产生operator加入等待队列。schedule每次只产生一个operator。dispatcher不断的循环将operarter通过心跳发给leader。

2、如果dispatcher速度很慢或者operator操作本身很慢,会不会导致OperatorControllor中等待队列不断增长,消耗大量内存,是否队列长度有上限?

3、 6.0版主中对"balance-leader-scheduler"增加了batch项(默认4),一次shedule会产生4个operator。"leader-schedule-limit"的限制下即使batch是多个的情况下同样会限制整体operator产生速度?

4、" scheduler-max-waiting-operator 用于控制每个调度器同时存在的 operator 的个数 ", 这个参数指的是在哪里的operator个数,等待队列?

1 理解正确
2 不会,各个 limit 之和就是上限。如果执行中的 Op 堆积了,那么会导致各调度暂时不生成 Op,不会由于持续生成 Op 而无限增长。
3 是。不过只是 transfer leader 的 Op 正常情况下执行非常快,所以 batch 还是效果很好的。之前生成速度远低于实际可执行上限。
4 当 Op 生成之后,但由于 store limit 等限制暂时无法执行时,会放入 wait 队列。队列中优先级较高的 Op 会在后续优先执行。这个参数配置的是这个优先队列的最大长度。

感谢大佬,再请教几个问题

  1. 看dispatch每次执行是有500毫秒的sleep,这不会影响下发tikv op的速度吗? 每次最多也只能下发等待队列里的op吧?
  2. 第 4条回复中的 优先队列是单独队列吗?和等待队列间有什么关系?是这个running operator队列吗?
    image

image

你好,代码相关问题的讨论可以在 github 上提个 Issue:Ask a Question,便于 RD 跟进回复,感谢支持~
https://github.com/pingcap/tidb/issues/new?assignees=&labels=type%2Fquestion&template=general-question.md