Analyze自动执行

【 TiDB 使用环境`】生产
【 TiDB 版本】
v5.1.0
【遇到的问题】

hi 我有个问题:
SHOW STATS_HEALTHY;
| zabbix | item_discovery | | 0 |
SHOW STATS_META;
zabbix | item_discovery | | 2022-05-26 19:04:50 | 2276517 | 1960912 |
SHOW ANALYZE STATUS
基本时间间隔很长

这个表健康一直是0, 不知道为什么不自动analyze
【复现路径】
【问题现象及影响】
此表有大量的Update和 join,健康分低于60的话,join就会执行10min以上
健康分如果是90以上的话,执行是秒级
已经调整的参数:
set global tidb_build_stats_concurrency=16;
readpool.storage.high-concurrency: 64
readpool.storage.low-concurrency: 16
readpool.storage.normal-concurrency: 32
set global tidb_index_lookup_join_concurrency=32;

影响:tidb-server OOM,并且语句卡住

检查如下三个系统变量,可适当调小tidb_auto_analyze_ratio

  • tidb_auto_analyze_ratio:表中多大比例的行被修改过时,触发自动收集统计信息,默认值0.5即50%
  • tidb_auto_analyze_start_time:每天进行统计信息收集的时间窗口的起始时刻,默认值00:00 +0000
  • tidb_auto_analyze_end_time:每天进行统计信息收集的时间窗口的结束时刻,默认值23:59 +0000

参考下

学习了。

  1. 这三个变量已经检查过了,因为现在此表的修改行数已经大于表本身的行数了,所以是符合条件的
  2. 时间窗口的话也是使用默认值,即全天

根据h5n1那个专栏,可以排查一下第5条那个gc问题

执行一下这个语句
SHOW COLUMN_STATS_USAGE WHERE db_name = ‘zabbix’ AND table_name = ‘item_discovery’;
Last_used_at列有没有使用到

这个健康度可以在监控里看吗

:yum:建议开新贴提问,尽量不要在历史贴追问。

没看到有相关的监控。

1 个赞

学到了,厉害

删除统计信息,手动收集