【 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 调度器无法再调度新的查询,因此会报出这个错误。
解决方法:
- 检查线程硬性限制: 使用
SHOW VARIABLES LIKE 'tidb_max_tiflash_threads';
命令查看 TiFlash 的线程硬性限制。- 调整线程硬性限制: 如果需要,可以适当提高
tidb_max_tiflash_threads
的值,以允许 TiFlash 使用更多的线程。- 优化查询: 优化查询语句,减少查询的执行时间,从而降低对线程的需求。
- 增加 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-数据落盘