# 控制 ANALYZE 的并发度

![left](./student-guide/diagram/18-Control-ANALYZE-concurrency-01-01.png)

-------------------------------------------------------------
执行 ANALYZE 语句的时候，你可以通过一些参数来调整并发度或者操作的region数量，以取得TiDB集群负载和执行性能的平衡。

- tidb_build_stats_concurrency
  - 目前 ANALYZE 执行的时候会被切分成一个个小的任务，每个任务只负责某一个列或者索引。调整该参数 可以控制同时执行的任务的数量。
  - 如果一个表索引数量为4个时，需要收集列和4个索引统计信息，在4个并发收集线程的情况下，肯定会有一个统计信息收集处于pending状态，需要等待其他统计信息收集完毕后才能收集这个统计信息，相当于统计信息收集的时间会变2倍，这时如果调整该参数并行度到5，就可以同时收集该表的所有的统计信息，节省统计信息收集的时间。
  - 注意：当这个变量被设置得更大时，会对集群的SQL执行性能产生一定影响

- tidb_distsql_scan_concurrency
  - 这个变量用来设置 scan 操作的并发度。OLAP 类应用适合较大的值，OLTP 类应用适合较小的值。对于 OLAP 类应用，最大值建议不要超过所有 TiKV 节点的 CPU 核数。
  - 在执行分析普通列任务的时候，调大该参数可以用于控制一次读取的 Region 数量。
  - 注意：这个参数不是给统计信息收集专用的，调整该参数会对所有SQL中涉及scan操作都有影响。

- tidb_index_serial_scan_concurrency
  - 这个变量用来设置顺序 scan 操作的并发度，OLAP 类应用适合较大的值，OLTP 类应用适合较小的值。
  - 因为索引本身是有序的，在执行分析索引列任务的时候，调整该参数可以用于控制一次读取的Region 数量。
  - 注意：当这些变量被设置得更大时，会对集群的SQL执行性能产生一定影响。
