【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
比如这个表有1000g。因为磁盘性能差。统计信息一次更新需要20小时。这个时候有什么办法加快统计信息更新。各位大佬有好办法么。
或者锁定统计信息?
控制 ANALYZE 并发度
执行 ANALYZE 语句的时候,你可以通过一些系统变量来调整并发度,以控制对系统的影响。
相关系统变量的关系如下图所示:
tidb_build_stats_concurrency
、tidb_build_sampling_stats_concurrency
和 tidb_analyze_partition_concurrency
为上下游关系。实际的总并发为:tidb_build_stats_concurrency
* (tidb_build_sampling_stats_concurrency
+ tidb_analyze_partition_concurrency
) 。所以在变更这些参数的时候,需要同时考虑这三个参数的值。建议按 tidb_analyze_partition_concurrency
、tidb_build_sampling_stats_concurrency
、tidb_build_stats_concurrency
的顺序逐个调节,并观察对系统的影响。这三个参数的值越大,对系统的资源开销就越大。
tidb_build_stats_concurrency
ANALYZE
在执行时会被切分成一个个小任务,每个任务只负责某一个列或者索引的统计信息收集。tidb_build_stats_concurrency
用于控制可以同时执行的小任务的数量,其默认值是 2
。TiDB v7.4.0 及其之前版本默认值为 4
。
tidb_build_sampling_stats_concurrency
在执行 ANALYZE
普通列任务的时候,tidb_build_sampling_stats_concurrency
可以用于控制执行采样任务的并发数量,其默认值是 2
。
tidb_analyze_partition_concurrency
在执行 ANALYZE
的时候,tidb_analyze_partition_concurrency
可以用于控制对分区表统计信息进行读写的并发度,其默认值是 2
。TiDB v7.4.0 及其之前版本默认值为 1
。
tidb_distsql_scan_concurrency
在执行分析普通列任务的时候,tidb_distsql_scan_concurrency
可以用于控制一次读取的 Region 数量,其默认值是 15。修改该变量值会影响查询性能,请谨慎调整。
tidb_index_serial_scan_concurrency
在执行分析索引列任务的时候,tidb_index_serial_scan_concurrency
可以用于控制一次读取的 Region 数量,其默认值是 1。修改该变量值会影响查询性能,请谨慎调整。
更新统计信息消耗过多的资源,可以通过系统变量 tidb_enable_auto_analyze关闭自动更新。
特别大的表,也可以按照比例收集信息。例如WITH 0.1 SAMPLERATE只收集10%的数据。
另外建议修改analyze的并发度,可以适当调大
锁定表 那统计信息不更新了。表还有业务查询。查询会变慢。
这个有详细教程么
加并发搞
如果sql较少,可以考虑绑定执行计划,把统计信息自动收集关掉。
一般都是调参加并发搞
调参数吧
调整下统计信息并发参数
有个统计信息持久化,可以修改下统计信息的默认执行参数,可以加上with参数
这个只能加并行
磁盘差
根在磁盘上,得解决磁盘的问题。
完全可以锁定统计信息
对了,还有可以调整并发和采样率来加快收集