查询tiflash报错is failed to schedule because of exceeding the thread hard limit in min-tso scheduler

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.6
Tiflash经常会挂掉,看监控发现如下现象:


请问应该调整哪些配置呢

TiFlash 报错 “is failed to schedule because of exceeding the thread hard limit in min-tso scheduler” 意味着 TiFlash 实例上的查询线程数量超过了系统设置的硬性限制,导致新的查询无法被调度。

问题分析:

  • 线程硬性限制: TiFlash 为了防止单个实例上的查询线程过多,导致资源耗尽,影响其他查询的执行效率,设置了线程硬性限制。
  • Min-TSO 调度器: TiFlash 使用 Min-TSO 调度器来优先调度 TSO 最小的查询,以保证事务的一致性。
  • 错误原因: 当 TiFlash 实例上的查询线程数量超过了硬性限制时,Min-TSO 调度器无法再调度新的查询,因此会报出这个错误。

解决方法:

  1. 检查线程硬性限制: 使用 SHOW VARIABLES LIKE 'tidb_max_tiflash_threads'; 命令查看 TiFlash 的线程硬性限制。
  2. 调整线程硬性限制: 如果需要,可以适当提高 tidb_max_tiflash_threads 的值,以允许 TiFlash 使用更多的线程。
  3. 优化查询: 优化查询语句,减少查询的执行时间,从而降低对线程的需求。
  4. 增加 TiFlash 实例: 如果查询负载过高,可以考虑增加 TiFlash 实例,将查询负载分散到多个实例上。

其他建议:

  • 监控 TiFlash 实例: 定期监控 TiFlash 实例的资源使用情况,例如线程使用率、CPU 使用率、内存使用率等,以便及时发现问题。
  • 分析慢查询: 分析慢查询,找出导致查询执行时间过长的原因,并进行优化。
  • 参考 TiDB 文档: 详细了解 TiFlash 的配置和优化方法,参考 TiDB 文档 https://docs.pingcap.com/tidb/。

Example SQL:

-- 查看 TiFlash 线程硬性限制
SHOW VARIABLES LIKE 'tidb_max_tiflash_threads';

-- 调整 TiFlash 线程硬性限制
SET @@tidb_max_tiflash_threads = 20;

注意: 调整 tidb_max_tiflash_threads 的值需要谨慎,过高的值可能会导致系统资源耗尽,影响其他服务的性能。建议根据实际情况进行调整,并进行充分的测试。

这是小助手的说法,我感觉你还是要查查是不是并发太大了。

另外经常挂掉是因为OOM?

这块你要看看落盘。

https://docs.pingcap.com/zh/tidb/stable/tiflash-spill-disk#tiflash-数据落盘