v5.0.2 run-auto-analyze为true,TiSpark一直不断的insert,不更新统计信息

【概述】:场景 + 问题概述
从4.0.13升级到 v5.0.2,run-auto-analyze为true,且另外3个参数保持默认值,一个主表通过tispark在不断往里insert数据,但是统计信息显示仍是0,导致查询总是走索引或kv
image


【背景】:做过哪些操作
tispark不断写入fact_3860表,但是3860表统计信息不更新

【现象】:业务和数据库现象
影响调度决策,总是走tikv,异常慢

【TiDB 版本】:
由4.0.13升级到5.0.2

【附件】:

表统计信息自动收集需要同时满足以下条件:
1、表中至少 1000 行数据
2、表从未被 analyze 过,至少在默认 1 分钟(20*statsLease)内无 DML 操作
3、如果表被 analyze 过,那么当累计到足够的修改,即当某个表的修改行数与总行数的比值(modify_count/row_count)大于 tidb_auto_analyze_ratio,并且当前时间在 tidb_auto_analyze_start_time 和 tidb_auto_analyze_end_time 之间时,后台会自动执行 analyze 语句

1.表有千万,且也在以百万速度插入
2.昨日新建的表,从未执行analyze,且是以批的形式插入,中间会有很多间隔超过1min的
3.未analyze过,新建后,统计信息一直是0

可以考虑先手工analyze一次,然后观察健康度情况。
注意:在业务低峰期进行analyze。

另外关注到start time 和 end time 没有设定时区,可能会导致时区不匹配

这个算bug吗,上面那两个表就是从新建,到最后写入完,1.5亿数据,都没更新,这次这个表又是这样,难道所有新表都要analyze以下?这就不是auto-analyze了吧,时区应该没问题,我们的机器上就是UTC时区

健康度:

我想起来了,这里是修改会触发自动更新统计信息,插入更新的是row_count。

当累计到足够的修改,即当某个表的修改行数与总行数的比值(modify_count/row_count)大于 tidb_auto_analyze_ratio


image
这个表已经从600w增加到900w了,也没更新row-count

image


一个多亿了,还是没更新

系统表里统计的信息是有延迟的~

关键是你看update_time从昨天晚上8点就没更新过了。。。 如果延迟这么高,还怎么用呢?这期间的查询岂不是都走tikv

@Lucien-卢西恩 大佬帮忙看一下,这个算BUG么?只插入不修改,健康度为0,索引走的一直不对~

fact3860 健康度是100,这个表的统计信息从新建都现在就没变过,一直是0

很奇怪,可以提供一下explain analyze的执行计划么?

额?不走tikv,是因为部署了TiFlash么?

是的,就是现在统计信息不正确,所有的sql调度肯定会受影响的,详见这个:TiFlash统计分析很慢

这个就是因为统计信息不更新,一些sql并没有走mpp,异常慢

还是个疑难杂症,只能等大佬解决了~

好的,谢谢,我执行一个对于4.0.13来说的大sql,在5.0.2 mpp确实生效了,但是这个表的统计信息确实不对,还是想明白下为什么统计信息没有自动更新,害怕后面生产出现这个帖子的问题:TiFlash统计分析很慢
亿级的表,因为统计信息没自动更新,调度器选择走了tikv,那生产就炸了,所以还是需要弄清这个统计信息更新问题的

https://github.com/pingcap/tispark/blob/master/docs/datasource_api_userguide.md
需要配置一下这个参数 enableUpdateTableStatistics

应该是这个意思了,我试下,非常感谢