报错信息build global-level stats failed。
fail to get stats version
5分钟一次,analyze时间长
我是感觉真的需要重视起来了,不能当作偶然了。
单个看都有偶然性,不过在统计信息这个点上,问题是连续出现的。
确实,尤其分区表的ddl很容易产生统计问题
我是感觉,应该尝试找找日志有没有统计信息相关的报错。
发现是统计信息的问题,然后删掉统计信息,再重建,这个有点被动。
再不行,有任何主动检测的办法也可以接受。
表有没有做过最新统计分析,健康度如何
重新收集后的统计信息也导出一份吧
一次性写入的历史数据不会变化的,索引后加的
经过测试应该基本找到原因了, 重新收集前stats_histograms里没有ind_paid_time索引的信息,因此测试删除ind_paid_time索引在stats_histograms里的信息后重启tidb server释放stats cache 就变成全表扫描了。
不过做反向测试吧删除的数据重新插回后仍然是全表扫描 且stats cache加载的统计信息都变成了0,看来生产是不能这么玩。
结论: 你导入的历史数据统计信息里,没有后加索引的统计信息,导致没用上索引,因此需要建索引后手动收集统计信息或tidb自动触发后台收集。
问题: 看前面测试 tidb对执行计划的选择上还是有些问题,即便是没有了stats_histograms里的索引信息,但通过stats_histograms里索引列的distinct_count 或者 stats_buckets中 SQL条件所落入的buckets范围判断,都不应该选择全表扫描。现在测试推断stats_histograms里所用的信息是个必选条件,没有就不再判断其他的了,不合理。
问了下官方 加索引后自动收集统计信息正在搞,期待后续版本吧
也就是现在加了索引必须手工收集统计信息才能生效对吧
嗯 如果达不到触发表自动统计信息收集就得这样
后续测试又发现了些东西,在7.5版本后建完索引会有一个小采用率的统计信息收集(测试了2个表分别在fast_reorg 打开和关闭情况下)
7.1.2版本建完索引后不会自动收集统计信息, 虽然stats_histograms没有索引信息,但能走索引
如果是换成一段范围的条件就走不了索引。
之前我们人带人的时候告诉我们倒入数据后得analyze table 一下 pg 和mysql都是这样 期待下个版本 现在手动一下
倒入数据后analyze table 在tidb上一般不用,健康度低了自动analyze
我理解加索引属于数据字典变更,不属于表的统计信息,加索引应该是重大变更,优化器应该自动识别才是对的,不管数据量多少
这里的伪统计信息具体包含哪些内容?
统计信息未及时更新
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。