【 TiDB 使用环境】生产环境
【 TiDB 版本】
v5.4.0
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
TIDB日志一直刷
[stats] auto analyze failed"] [sql=“analyze table DB
.TABLE
”] [cost_time=17.282654928s] [error=“[kv:8004]Transaction is too large, size: 105054135”]
目前表已经不存在,参考如下链接 drop stat 没用。 stats-lease
参数设置为0有什么影响?还是有其他方式不然它刷报错?
https://github.com/pingcap/tidb/issues/33276
【资源配置】
【附件:截图/日志/监控】
在 v6.1.0 之前这个开关通过 TiDB 配置文件 (performance.run-auto-analyze
) 进行配置TiDB 是否以后台操作自动更新表的统计信息,建议你关闭自动收集统计信息,或者通过参数SET GLOBAL tidb_auto_analyze_ratio = 0;关闭自动收集统计信息,然后手工部署任务进行收集需要收集统计信息的表
关闭这个统计会有什么问题?
在发生增加,删除以及修改语句时,TiDB 会自动更新表的总行数以及修改的行数。这些信息会定期持久化下来,更新的周期是 20 * stats-lease
,stats-lease
的默认值是 3s,如果将其指定为 0,那么将不会自动更新。
当 stats-lease
为 0s 时,TiDB 会以 3s 的时间间隔周期性的读取系统表中的统计信息并更新内存中缓存的统计信息。但不会自动修改统计信息相关系统表,具体来说,TiDB 不再自动修改这些表:
-
mysql.stats_meta
:TiDB 不再自动记录事务中对某张表的修改行数,也不会更新到这个系统表中
-
mysql.stats_histograms
/mysql.stats_buckets
和 mysql.stats_top_n
:TiDB 不再自动 analyze 和主动更新统计信息
-
mysql.stats_feedback
:TiDB 不再根据被查询的数据反馈的部分统计信息更新表和索引的统计信息
dba-kit
(张天师)
5
这个应该是 TiDB的一个BUG,不过如果表不存在,只是想停止刷这个表,不让报错。感觉可以试下将一直报错的tidb-server重启一下,把内存里的执行队列清空一下