【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】v6.5.
【问题】
tidb 打开 tidb_auto_analyze
的情况下,analyze 执行的任务就实例服务器始终调度到一台服务(这台服务有pd+tikv+tidb)。
问题1: auto_analyze 调度逻辑是什么。
问题2: 能否指定运行服务器(auto_analyze 情况下)
问题1:TiDB 的自动统计信息收集(auto analyze)是由 TiDB Server 内部的一个协程来完成的,该协程会定期扫描所有的表,判断是否需要进行统计信息收集。如果需要进行统计信息收集,则会在当前 TiDB Server 上启动一个新的协程来执行统计信息收集任务。因此,auto analyze 的调度逻辑是在 TiDB Server 内部完成的,不涉及到 TiKV 或 PD 的调度。
问题2:在 auto analyze 的情况下,无法指定运行服务器。TiDB Server 会根据自身的负载情况来决定是否执行统计信息收集任务,以及在哪个 TiDB Server 上执行任务。如果需要指定运行服务器,可以使用手动统计信息收集(manual analyze)来完成。手动统计信息收集可以通过设置 tidb_analyze_version
全局变量来控制统计信息的版本,以及通过 ANALYZE TABLE
命令来手动执行统计信息收集任务。例如:
-- 设置统计信息版本为 1
SET GLOBAL tidb_analyze_version=1;
-- 手动执行统计信息收集任务
ANALYZE TABLE table_name;
手动统计信息收集可以在任意 TiDB Server 上执行,因此可以通过手动统计信息收集来指定运行服务器。