tidb-server中limit查询问题

preOrderFlag,exchangeFlag的分布情况,目前90%以上都是False

Limit_17 cop[tikv] 这个就表示已经把limit下推到tikv了,可能这块看执行计划的返回行数可能跟理解有些偏差,推测原因如下:
limit下推是把limit xxx的具体限制下推到coprocessor任务中,执行计划中显示的是所有task的总行数

  1. 只包含索引列时
    ├─Limit_16(Build)
    │ └─IndexRangeScan_14
    因为只有索引的条件,所以limit能下推到索引扫描后,这个索引扫描分成了3个task , 每个task能找到10条记录,因此actrows显示处理30行,返回rowid后回表└─TableRowIDScan_15(Probe) 只查询了10条,这个10条可能正好在一个tikv上所有只有一个cop task,然后向tidb server 返回10条。不知道在回表时是否有排序或去重处理。

2、where条件不止索引列时
因为where条件中除了索引列外还有其他列所以limit下推不能在index scan一层实现,limit下推到回表时。
index scan有一个task 返回了960000条,TableRowIDScan_15 被下推到8个cop task,返回总行数1792条,然后返回limit算子时做limit现在,每个task返回100行,总共800行,最后返回tidb server的index lookup算子时是200行。


下面这2个可以看下。
https://github.com/pingcap/tidb/issues/9530
https://github.com/pingcap/tidb/issues/21250

另外你观察到流量是哪到哪的? tidb-server 内存是在查询后突增到6GB吗?

1 个赞

多谢多谢,很清晰

流量是我用dstat -all实时观测的,从tikv到这台tidb-server的流量,因为prometheus抓取不到这种尖峰值

请问:上面的200行,是怎么得出的?

写错了 应该是100行,你那个是200行

node_exporter有network监控,可以看tidb server的流量

好的,谢谢

node_exporter上面的流量会被平均掉,所以看不到峰值

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。