如何理解TiFlash 的并发数并进行调优?

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.5.2
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】

如何理解TiFlash 的并发数并进行调优?
TiFlash 计算的并发数: tidb_opt_tiflash_concurrency_factor
TiFlash 中 request 执行的最大并发度: tidb_max_tiflash_threads
系统多次出现 TiFlash Request Duration延迟,出现问题的时候大量的SQL执行陷入等待直至达到最长执行时间而超时。
tidb_max_tiflash_threads v6.1.0 版本开始引入

  • 作用域:SESSION | GLOBAL
  • 是否持久化到集群:是
  • 类型:整数型
  • 默认值:-1
  • 范围:[-1, 256]
  • 单位:线程
  • TiFlash 中 request 执行的最大并发度。默认值为 -1,表示该系统变量无效。0 表示由 TiFlash 系统自动设置该值。

tidb_opt_tiflash_concurrency_factor

  • 作用域:SESSION | GLOBAL
  • 是否持久化到集群:是
  • 类型:浮点数
  • 范围:[0, 2147483647]
  • 默认值:24.0
  • 表示 TiFlash 计算的并发数。该变量是代价模型内部使用的变量,不建议修改该变量的值。

【资源配置】

【附件:截图/日志/监控】
故障时段1截图:


故障时段2截图:


SQL 执行超时:

TiFlash 的并发数是指在 TiDB 中同时向 TiFlash 发送查询请求的数量。在 TiDB 配置文件中,可以通过 tidb_opt_tiflash_concurrency_factor 参数来设置 TiFlash 的并发数。该参数的默认值为 24,表示 TiDB 可以同时向 TiFlash 发送 24 个查询请求。

另外,TiFlash 中每个请求的执行并发度可以通过 tidb_max_tiflash_threads 参数进行配置。该参数的默认值为 16,表示每个请求最多可以使用 16 个线程并发执行。

当系统出现 TiFlash Request Duration 延迟的问题时,可能是由于以下原因导致的:

  1. TiFlash 资源不足:TiFlash 的并发数和每个请求的执行并发度都需要消耗系统资源。如果 TiFlash 节点的资源(如 CPU、内存、磁盘)不足,可能会导致请求延迟。您可以通过监控 TiFlash 节点的资源使用情况来判断是否存在资源瓶颈,并根据需要进行资源调整。

  2. 查询负载过重:如果 TiFlash 节点同时接收到大量的查询请求,超过了其处理能力,也会导致请求延迟。您可以通过监控 TiFlash 节点的查询负载情况来判断是否存在负载过重的情况,并考虑优化查询或增加 TiFlash 节点数量来分担负载。

针对 TiFlash 请求延迟的调优,您可以考虑以下措施:

  1. 调整 TiFlash 的并发数:根据实际情况,适当调整 tidb_opt_tiflash_concurrency_factor 参数的值,增加或减少 TiDB 向 TiFlash 发送查询请求的并发数。

  2. 调整 TiFlash 请求的执行并发度:根据实际情况,适当调整 tidb_max_tiflash_threads 参数的值,增加或减少每个请求的执行并发度。

  3. 增加 TiFlash 节点数量:如果 TiFlash 节点的负载过重,可以考虑增加 TiFlash 节点的数量,以提高整体的处理能力。

  4. 优化查询语句:对于频繁访问 TiFlash 的查询语句,可以通过优化查询语句的方式来减少查询的数据量和计算量,从而提高查询性能。

请注意,TiFlash 的调优需要根据具体的系统配置和负载情况进行调整,建议在进行调优之前先进行性能分析和监控,以便更好地了解系统的瓶颈和优化方向。

希望这些信息对您有帮助。如果您有任何进一步的问题,请随时提问。

1 个赞

思路瞬间清晰了,非常感谢 :dizzy:

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。