tidb的analyze

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

测试环境下,126G内存40C,3.6T磁盘(普通盘,非SSD)。
PD V6.5.2
目测造一个29.89亿的表,包含49个bigint(其中10个有值) ,9个text(2个有值) ,4个datetime(4个有值),9个varchar(9个有值),2个decimal (2个有值) 。
已经停止造数据2天了。但是每天都会对这个表进行analyze table ,每次耗时12小时左右 。
如果关闭自动analyze ,那么以后就不会analyze table ,就可能导致查询性能不好;
如果不关闭自动analyze ,那么生产如果有多个大表,每天都在analyze table 中度过。
是否可以每次有增删改 到单表的某个百分比才重新analyze ?

tidb_auto_analyze_ratio这个参数就是用来控制多少数据变更才触发自动收集统计信息的,你看下是多少,另外SHOW ANALYZE STATUS
看下是不是这个表每天的自动统计信息收集任务都失败了
如果自动收集失败了,建议手工收集一下看看
SET tidb_build_stats_concurrency=16;
SET tidb_distsql_scan_concurrency =64;
ANALYZE TABLE table_name WITH 0.1 SAMPLERATE;—收集10%的统计信息

3 个赞

手动执行 analyze table 和 自动执行 analyze table ,并行度不一样,所以执行快慢上差别很大

如果允许,可以考虑 auto analyze table + 辅助脚本执行 analyze table,来满足不同的业务场景

如果关闭了,则会影响到数据的信息采集,会导致执行计划有偏差,当然,也可以采用hint 的方式,直接跳过执行计划…

建议根据你的实际情况,测试后看看那种方式更合适…

1 个赞

tidb_auto_analyze_ratio:这个参数表示在修改一张表的数据行数超过总行数的多少百分比后,将触发自动的表分析任务。默认值是 0.5,即当修改的数据行数超过总行数的 50% 时触发自动分析。

1 个赞

Fail_reason: [tikv:1317]Query execution was interrupted
好吧,好像看到的最近几次都是这个报错,应该的收集信息失败。

1 个赞

警告
锁定统计信息目前为实验特性,不建议在生产环境中使用。

从 v6.5.0 开始,TiDB 引入了锁定统计信息的特性。当一张表的统计信息被锁定以后,该表的统计信息将无法被修改,也无法对该表进行 ANALYZE 操作。用例如下:
mysql> lock stats t;

1 个赞

有参数可以控制表数据修改比率超过多少才进行统计信息收集操作

我用的是V7.5.1 ,tidb_auto_analyze_ratio 设置为 0.5 ,但是通过管理平台查看扫描的分析的频率来看,我的表数据变动应该是百万级,数据应该每天达不到变动 50 % ,它也进行操作了

可以通过参数设置百分比