【 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 延迟的问题时,可能是由于以下原因导致的:
-
TiFlash 资源不足:TiFlash 的并发数和每个请求的执行并发度都需要消耗系统资源。如果 TiFlash 节点的资源(如 CPU、内存、磁盘)不足,可能会导致请求延迟。您可以通过监控 TiFlash 节点的资源使用情况来判断是否存在资源瓶颈,并根据需要进行资源调整。
-
查询负载过重:如果 TiFlash 节点同时接收到大量的查询请求,超过了其处理能力,也会导致请求延迟。您可以通过监控 TiFlash 节点的查询负载情况来判断是否存在负载过重的情况,并考虑优化查询或增加 TiFlash 节点数量来分担负载。
针对 TiFlash 请求延迟的调优,您可以考虑以下措施:
-
调整 TiFlash 的并发数:根据实际情况,适当调整 tidb_opt_tiflash_concurrency_factor
参数的值,增加或减少 TiDB 向 TiFlash 发送查询请求的并发数。
-
调整 TiFlash 请求的执行并发度:根据实际情况,适当调整 tidb_max_tiflash_threads
参数的值,增加或减少每个请求的执行并发度。
-
增加 TiFlash 节点数量:如果 TiFlash 节点的负载过重,可以考虑增加 TiFlash 节点的数量,以提高整体的处理能力。
-
优化查询语句:对于频繁访问 TiFlash 的查询语句,可以通过优化查询语句的方式来减少查询的数据量和计算量,从而提高查询性能。
请注意,TiFlash 的调优需要根据具体的系统配置和负载情况进行调整,建议在进行调优之前先进行性能分析和监控,以便更好地了解系统的瓶颈和优化方向。
希望这些信息对您有帮助。如果您有任何进一步的问题,请随时提问。
1 个赞
system
(system)
关闭
4
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。