TiDB 执行计划不对导致延迟增高

【TiDB 版本】v3.0.0

【问题描述】原本10秒钟可以查询出来的SQL,今天需要10分钟,甚至根本查不动,凡涉及到该表的所有SQL都变慢,而其他表是正常的。慢日志中输出了执行计划,直接查看执行计划,发现执行计划是有问题的,手动analyze table后执行计划恢复,问题得到解决。
统计信息没有自动更新,查看到官方文档解决方案有两种

  • 手动 analyze table ,配合 crontab 定期 analyze ,维持统计信息准确度。
  • 自动 auto analyze ,调低 analyze ratio 阈值,提高收集频次,并设置运行时间窗口。示例如下:
    • set global tidb_auto_analyze_ratio=0.2;
    • set global tidb_auto_analyze_start_time='00:00 +0800';
    • set global tidb_auto_analyze_end_time='06:00 +0800';
      请问两种方案哪种更好?

我这边实践的是自动auto analyze好,按需收集

两种收集统计信息方式的选择取决于业务访问的特点。

1、自动收集一般是建议在业务低峰期进行,并且确保收集窗口尽可能的在业务核心表数据变化率满足 ratio 参数设置的情况下进行。能够最大限度地收集数据库中表的统计信息

2、手动 crontab 制订收集任务可以满足某些特殊情况,比如某张核心表在自动收集的时间窗口,无法完成收集,则可以使用 crontab 辅助收集,降低因统计信息过旧执行计划出现偏差的概率

另外,可以使用 hint 来固定执行计划。4.0 版本可使用 SPM 对执行计划更好的进行管理~