analyze 问题

【 TiDB 使用环境】生产环境
【问题现象及影响】

生产上有个表健康度显示为0

导致生产一直触发自动analyze操作,但是我设置了自动analyze的时间的, 1.可自动触发并不在我设定的时间内 是怎么回事?



2.为什么明明执行了analyze 却健康度还是为0

  1. 参数设置的不对,要设置
    00:00 +0800
    07:00 +0800
    这样才会在0点到7点执行。

  2. 你看下这张表的数据量是多少 ?

参数已经改了 我再观察下,
表的数据量不大 才14万

改了参数之后,analyze 操作好像确实不在跑了,参数的初始值就是+0000 我改的时候就改了前面的:joy:

那为啥 自动做的analyze 没有生效呢, 健康值还是0 其他的表我手动执行analyze 之后健康值就变100了


手动执行完以后就生效了

手动收集肯定生效啊,
手动收集之前,健康度为0表的 最后收集统计信息是什么时间?

你改的那个时间 是凌晨0点到7点执行, 没有经过那个时间段, 就不会执行analyze, 健康度就还是原来的值

生产环境执行sql触发 analyze 原因应该是 tidb_auto_analyze_ratio 的值造成的, 因为表的健康度已经为0, 就是表内容都备修改过;

如上你的图中 tidb_auto_analyze_ratio 配置为默认值 0.5, 表示表中更新的行超过了 50% 就 触发analyze;

当然罪魁祸首还是 analyze 没按照设计的时间自动执行引起的

怎么看最后收集信息的时间

一开始时间段是错的, 楼上说的+0800 是对的, 修改成+0800后 就没有在触发了,
现在的问题是自动触发的analyze 并没有生效, 在我修改参数之前analyze 一直被触发, 但是健康值却一直是0, 我手动触发后 健康值才是100

是否自动analyze后,表又被进行了大量DML操作?

没有,analyze 触发 后因为没有生效,所以一直再触发,可以重我的截图中看到, 后来我手动触发后健康值就变100了
说明自动触发的时候没有生效。

show analyze status; 显示每个库中的每张表 开始统计信息时间

你修改之前 时间为 +0000 , 对于咱们的时区, 你设置的 那个时间段正好包含咱们的上班的时间段,在配合tidb_auto_analyze_ratio参数值, 就触发了 统计信息。

你修改为+0800 后, 可以检查下晚上有没有做统计信息。


这个我前面就改掉了

嗯,
改掉之后, 现在看 晚上应该有统计信息了吧(tidb_auto_analyze_ratio 满足条件的情况下)

我现在的问题是 为啥 analyze 自动触发 没有生效,你可以看下我的图片和后面的描述

1、analyze 触发后没有生效是什么意思?
2、目前为止 有健康度小于50的表吗?
3、检查下每张表的 上次收集统计信息时间是什么?

  1. 首先我觉得既然帮助别人解决问题那么肯定要先看清楚别人的问题和回复对吗?
  2. 我问题中贴了图片dashboard中一直执行analyze table 同一个表, 该表健康值始终为0,直到我手动执行analyze table后 健康值变为100, 这是不是可以说明在我手动执行前 tidb 自动执行的analyze table 是无效的?