RU消耗并没有达到上限,执行计划中RU等待耗时高。如何处理?

【TiDB 使用环境】测试
请教各位大佬,SQL查询等待RU耗时较高,但是在RU资源监控处看到RU并没有达到上限,什么原因?如何处理优化。


image
image

这个rg组的优先级调高试试

有配置限制吗

是不是有一些全表扫描、无索引、大查询,单 SQL 消耗大量 RU的情况

看下后台日志

为什么 RU 没到上限,SQL 仍然等待 RU

核心原因:

RU 监控展示的是总体使用率,而 SQL 等待的是瞬时令牌分配。

RU 使用的是 Token Bucket(令牌桶)调度机制

逻辑:

RU_PER_SEC = 每秒生成令牌
BURST = 可瞬时使用额度
SQL执行前必须拿到令牌
拿不到就等待

因此会出现:

监控 RU 未打满
SQL 却在等待 RU

本质:

瞬时 RU 不够,而不是总量不

1 个赞

优化方案

按效果排序。


方案一:提高 RU_PER_SEC(最直接)

测试环境建议直接放大。

例如:

ALTER RESOURCE GROUP default
RU_PER_SEC = 10000;

20000

效果立刻改善。


方案二:提高 BURST_LIMIT

让大 SQL 不排队。

ALTER RESOURCE GROUP default
BURST_LIMIT = 20000;

适合:

测试

OLAP

批处理。


方案三:拆分资源组

例如:

OLTP
OLAP
TEST

不同资源组。

避免互相抢 RU

1 个赞

也可能不是资源不够,而是资源组里的请求在排队等待调度 ,或者底层 TiKV 慢导致等待时间被统计到 RU 等待里

或者监控中的指标值被平均了,看不到瞬时满的情况