【 TiDB 使用环境】生产环境
【 TiDB 版本】5.2.2
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
查看慢日志一直在执行一个SQL,执行好几天都没结束:
ANALYZE TABLE thc_5001_democqzs
.form_engine_template
;
【资源配置】资源混合部署
【附件:截图/日志/监控】
【 TiDB 使用环境】生产环境
【 TiDB 版本】5.2.2
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
查看慢日志一直在执行一个SQL,执行好几天都没结束:
ANALYZE TABLE thc_5001_democqzs
.form_engine_template
;
【资源配置】资源混合部署
【附件:截图/日志/监控】
你这个是自动执行的job吧?
我之前遇到多,大表自动跑的一直失败,手动执行很快。可以手动跑下看看。
好的,我试试
analyze table 一般很快的(表在亿级别),因为analyze它是有个比例的抽样,不是整表统计
表大的话建议手动收集,可以WITH FLOAT_NUM SAMPLERATE分析小样本的数据,如果是全库有很多大表,又不愿意耗费太多的统计信息收集造成的消耗的话,可以将 tidb_enable_fast_analyze
设置为 1
来打开快速分析功能,不过不建议这样做,可以将tidb_auto_analyze_ratio自动阈值调大,然后部署手动任务对大表进行小样本分析
自动analyze慢是因为单线程跑的 。这个表里的数据变更频繁吗 ?
不频繁,使我们给客户私有化部署。初次MySQL同步到tidb后,就一直自动执行analyze
好的,多谢,我试一下这个参数
hi,有什么更新吗?
tidb_build_stats_concurrency
and tidb_distsql_scan_concurrency and tidb_index_serial_scan_concurrency大表自动跑的一直失败 请问下为什么会失败呢
请问下老师,自动跑的analyze 语句会受到 max_execution_time
系统变量的控制嘛,如果自动跑的analyze 语句能够受到max_execution_time 系统变量控制的话,那么是不是可以把max_execution_time 设置一个能够接收的值呢?
自动跑是单线程跑的,肯定慢啊,所以会收集失败
难道是因为慢就收集失败?这不应该一直跑嘛,是不是有什么超时机制,或者跑的时候出问题了
有窗口期啊,不然一直跑,影响你正常业务了
你这个窗口期是通过max_execution_time 实现的嘛?
tidb_auto_analyze_start_time tidb_auto_analyze_end_time 这俩吧几点开始几点结束,大表不建议走自动收集,可以部署定时任务,开多线程小样本收集,不然太大的表真收集不完。。。
get了,多谢老师
好的,谢谢