tidb应该推出 限定一条语句走tiflash 的hint

TiDB 已有强制指定 TiFlash、查询级内存限制和自动落盘能力,但目前不能通过一个 Hint 同时设置“单条 SQL 的 TiFlash 总内存上限”。因此这是一个合理的功能增强诉求,现有证据不足以定性为产品缺陷。

适用版本:

  • READ_FROM_STORAGE(TIFLASH[表名]) 可在语句级指定 TiFlash。
  • TiFlash 从 v7.0.0 起支持部分执行算子落盘。
  • 从 v7.4.0 起,可通过以下会话/全局变量控制单条查询在每个 TiFlash 节点上的内存和落盘阈值:
SET SESSION tiflash_mem_quota_query_per_node = 8589934592;
SET SESSION tiflash_query_spill_ratio = 0.7;

但官方变量说明中,这两个变量均为 Applies to hint SET_VAR: No,所以不能写成:

/*+ SET_VAR(tiflash_mem_quota_query_per_node=...) */

建议诊断时执行:

SELECT VERSION();
SHOW VARIABLES LIKE 'tiflash_mem_quota_query_per_node';
SHOW VARIABLES LIKE 'tiflash_query_spill_ratio';
EXPLAIN ANALYZE <原SQL>;

同时检查 TiFlash 日志中的峰值内存和 spill 记录,确认主要消耗来自 Sort、Hash Join、Hash Aggregation,还是不支持落盘的算子。

风险:设置过低会频繁落盘,增加磁盘 IO 和查询延迟;并非所有算子都支持 spill,即使配置查询级限制,也可能因非落盘算子内存过高而终止查询。建议先在会话级和测试环境验证,不要直接修改全局值。

还请楼主补充 TiDB 版本、完整 SQL、EXPLAIN ANALYZE、TiFlash 节点内存、并发数,以及问题期间的 TiFlash 内存和 spill 曲线。如果核心诉求确实是 Hint 级总内存限制,建议携带这些材料提交 Feature Request。