统计信息更新存在问题

【 TiDB 使用环境`】生产环境
【 TiDB 版本】 v5.3.0
【 背景 】 基于DM同步MYSQL数据到新搭建的TIDB集群,某些查询选择的索引异常,进一步发现虽然TIDB有执行过analyze语句,但是表的健康度等信息不变

【附件】

49

10

48

1) dm同步现在是增量阶段还是全量阶段?
2) show stats_meta like ''overseaim_sku; 看看输出是什么?

dm同步目前位于增量阶段

看下tidb.log里 analyze有报错没

tidb是部署在k8s中的,暂时没有收集日志…

上面的截图应该是analyze完成的语句吧

  1. 点进去可以看看每条 Analyze SQL 执行是否成功;
  2. 2186100385/2213561257 = 98%,看来这个表行变更很频繁, 比值大于 tidb_auto_analyze_ratio 时触发 analyze 语句, from → https://docs.pingcap.com/zh/tidb/stable/sql-faq#在-tidb-中-auto-analyze-的触发策略是怎样的

有 2 点猜测,1. analyze 正常 ,但 analyze 速度追不上 update 速度,2. analyze SQL 执行失败,一直没更新 healthy。但从 healthy 看只有 1 ,更接近第二种猜测。

另外建议,开启收集日志,没有日志排查问题全靠猜。

是的,查看日志发现有报错信息,这样是需要调长gc时间吗 ?

GC life time is shorter than transaction duration, transaction starts at XXXXX.

另外,我注意到普通的长事务似乎PD会自动调整以维护start_ts之后的数据,analyze是因为内部SQL的原因不考虑这样做吗

  1. 统计信息有过一些行为修改(GC不影响Analyze --> GC影响Analyze --> GC不影响Analyze),如这个 PR 显示 v5.2 及以上版本会采用 snap 读统计信息,就是会自动延长 GC 时间,from --> https://github.com/pingcap/tidb/issues/23453;
  2. 但是也看到官方意识到了这个问题,想要再改回来,但改回来会导致执行完的统计信息并不是最新的,在update 量比较大的场景下,会出现统计信息过期问题;

看你的是 v5.3.0 + 生产环境,如果为了analyze执行完,可以选个业务低峰期把 GC 调大,待收集完后再改回去。
同时注意适当调整 tidb_gc_max_wait_time kill analyze SQL 。

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。