查询时,不同的limit 效率相差极大

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.4.0
【复现路径】一个查询语句
SELECT workflow_task.id FROM workflow_task WHERE (workflow_task.status = ‘RUNNING’ OR workflow_task.status = ‘CREATED’) AND workflow_task.workflow_id = 720001 ORDER BY workflow_task.priority DESC, workflow_task.created_at limit 50;
当它在limit 48及以下时,查询都秒回,limit 49及以上时,就要30min或者一直不返回…
我抓了两个执行计划,看到limit 50时,rocksdb的动作有些异常

另外,tikv此前升级过一次配置,从 32c64g升到48c192g
下面是对比两个trace 也不知道有没有帮助


目标表 340w行,符合上面查询语句的(不加limit)的有54条,analyze table过 前后没有太大变化,其中有个细节,昨天晚上stat healthy 84,到今天早上就49了,业务反馈每天有大约百万的update操作

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面

【附件:截图/日志/监控】
附上执行计划
limit10.csv (2.0 KB)
limit50.csv (2.0 KB)

数据库的GC时间多大,每天有几百万的update? update的数据有没有规律?

1 个赞

gc life time 是10 min update是否规律暂时无法考量,业务也只捕捉了一个counter

看你的limit50的执行计划:delete_skipped_count: 21031这个表是不是很多gc数据没有及时清理,查limit50,需要过滤的gc数据太多了

有没有方法来印证这个猜测?
另外, limit50 和limit10 的 delete_skipped_count 为啥会有如此差距?按理是走的一个计划呀。。。

带order by 的limit 可以看看 limit 49 及以上的数据,分布是如何的?是不是都是每天update的对象?

不加limit 的话 一共就 54 条记录, 感觉还谈不上分布… 但每天update是有的,而且update的行数也和48,49 不会强关联

可以看看监控 gc safe point 是不是正常推进的?

1 个赞

你的排序字段去掉试试,我感觉应该是按这个排序的数据导致的,很多对应的数据被删除或者修改了,导致你limit50的时候需要rockdb扫描的数据太多

搞个软删除,用单独的字段记录是否被删除就可以了

然后用其他的字段,比如主键和这个记录状态的字段做个联合索引,实现索引打散过滤,这样效率会高很多了(如果单独用这个记录状态作为索引键,会出现热点索引的问题,这个要注意)

或者利用分区,数据的清理通过 truncate 分区,这样也可以提高效率(基本不会影响 limit 的查询效率)


12h 的图

去掉排序,秒出,但这个排序+limit 是业务逻辑了~

SHOW config WHERE TYPE=‘tikv’ AND NAME LIKE ‘%enable-compaction-filter%’,看一下这个参数是什么,false的话改成true
另外可以配置下每次gc的数据量,这个可能对集群性能有一定的影响,不建议修改的过大
tikv-ctl --host=ip:port modify-tikv-config -n gc.max-write-bytes-per-sec -v 10MB

四个tikv的 enable-compaction-filter 参数都是true

write bytes per sec 10MB 是改大还是改小了? 我们现在所有tikv 节点 的 io utililty 都 超过95%,我感觉不到最后一步,先不动这个参数

同一个region top50


top48

时间差异居然如此之大。

另外top50
read_byte: 8.73 GB delete_skipped_count: 21031
top10
read_byte: 28.2 MB delete_skipped_count: 0

多少和gc有点关系吧。

在 limit 48以下,恒定 秒出。。
50以上出不出全看脸。。。。
gc的话,不是应该一视同仁么。。。

你的gc图真的不太正常。这是我的。差异还是挺明显的。

tikv-ctl --host=tikv_ip:port region-properties -r 81758895 和 78757137看看

1 个赞

看完后,发现都是大佬在帮你看,哈哈哈好厉害

所以,我应该如何 dig 一下?