关于v7.1版本资源管控特性的疑问

【 TiDB 使用环境】测试
【 TiDB 版本】v7.1.0
【复现路径】单条语句加hint使用资源管控特性
【遇到的问题:问题现象及影响】
现在有两种情况发生,
情况1:
RU 为 1 的情况下,我有一个原本就超内存的select语句,绑定hint之后仍然报错超出内存大小,执行失败
情况2:
RU 为 1 的情况下,我有一个原本就超内存的select语句,绑定hint后报错Exceeded resource group quota limitation
各位大佬,想了解一下,为什么会出现两种情况的发生。并且这个对单条SQL的管控怎么理解,到底应该是超出RU限制kill掉,还是以最高绑定RU缓慢执行
【附件:截图/日志/监控】
情况1截图:


情况2截图:

1 个赞

你是说为啥2个提示不一样吗?我觉得可能是第一个sql触发了tidb层的限制,第2个是tikv层的。所以提示不一样。

TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度的能力。

不好意思,描述的不是很全面,两条语句都没有做优先级,全部按照的默认,并且每次在执行的时候都是只有对应的单条语句,没有其他任何操作。
然后触发TiDB层流控的话,我不知道是不是,但是即使触发了,应该也不会是内存超出的这种报错把。更合理一些应该是要么报超出了RU限制,要么则缓慢执行(不确定具体是哪种),感觉这个报错更偏向于hint失效的报错(当时没有留意hint是否生效,忘记了 :smiling_face_with_tear:
第二条语句,就它一条语句在执行,也没有任何其他操作的情况下,应该不会涉及到优先级调度的问题。

可以参考这篇文章中 Bad SQL 限流章节说明

1 个赞

老师您好,有两个问题想要确认一下,谢谢
1、就是说如果hint方式对单条SQL进行RU限制后,只要是负债没有达到当前版本的30倍,是不会报错的是吧?
2、正常一个SQL的流程获取完region点信息后,对于同一个TiKV是不是只有一次RPC请求,使用batch的方式?那如果是绑定RU的SQL则会进行多次串行?

1、就是说如果hint方式对单条SQL进行RU限制后,只要是负债没有达到当前版本的30倍,是不会报错的是吧?
是的,没有超过30倍不会报错。
2、正常一个SQL的流程获取完region点信息后,对于同一个TiKV是不是只有一次RPC请求,使用batch的方式?那如果是绑定RU的SQL则会进行多次串行?
一个复杂 AP SQL 可能会有多个算子请求多次 TiKV,单个算子是并发 Batch 请求多个 Region,第二个算子开始执行之前会统计第一个算子消耗的 RU 并在必要时出发流控。正常 OLTP SQL 一般是一次 TiKV 请求,此时多个 SQL 之间也会形成并发请求和 RU 控制

1 个赞

好的,谢谢老师答疑

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