【 TiDB 使用环境】生产环境
【问题现象及影响】
生产上有个表健康度显示为0
导致生产一直触发自动analyze操作,但是我设置了自动analyze的时间的, 1.可自动触发并不在我设定的时间内 是怎么回事?
2.为什么明明执行了analyze 却健康度还是为0
【 TiDB 使用环境】生产环境
【问题现象及影响】
生产上有个表健康度显示为0
导致生产一直触发自动analyze操作,但是我设置了自动analyze的时间的, 1.可自动触发并不在我设定的时间内 是怎么回事?
参数设置的不对,要设置
00:00 +0800
07:00 +0800
这样才会在0点到7点执行。
你看下这张表的数据量是多少 ?
参数已经改了 我再观察下,
表的数据量不大 才14万
改了参数之后,analyze 操作好像确实不在跑了,参数的初始值就是+0000 我改的时候就改了前面的
那为啥 自动做的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 满足条件的情况下)
1、analyze 触发后没有生效是什么意思?
2、目前为止 有健康度小于50的表吗?
3、检查下每张表的 上次收集统计信息时间是什么?