RU占用高,如何找到占用RU较高的SQL排查?

【 TiDB 使用环境】生产环境
生产出现了,资源超出配额(初始配了500),导致查询报错的问题。已经进行了配额调整(1500),还配置了超出配额允许使用系统剩余的资源。
我想找到到底是哪个SQL,或者是哪些SQL导致的RU使用超标?


在这个时间区间内并没看找到明显资源占用多的SQL,反而有很多是由于 “RC 等待累积耗时” 过高导致整体执行时间很长的SQL。不知道是我排查的方式有问题还是其他原因?请教各位大佬,遇到这种问题你们是怎么排查的?

1 个赞

https://docs.pingcap.com/zh/tidb/stable/information-schema-slow-query/#slow_query

slow_query和cluster_slow_query表上,有

Field Type Null Key Default Extra
Resource_group varchar(64) YES NULL
Request_unit_read double YES NULL
Request_unit_write double YES NULL

这3个字段。

https://docs.pingcap.com/zh/tidb/stable/statement-summary-tables/#statements_summary

  • statements_summary
  • statements_summary_history
  • cluster_statements_summary
  • cluster_statements_summary_history

这4个表也有和资源管控相关的字段:

  • AVG_REQUEST_UNIT_WRITE:执行 SQL 语句平均消耗的写 RU
  • MAX_REQUEST_UNIT_WRITE:执行 SQL 语句最大消耗的写 RU
  • AVG_REQUEST_UNIT_READ:执行 SQL 语句平均消耗的读 RU
  • MAX_REQUEST_UNIT_READ:执行 SQL 语句最大消耗的读 RU
  • AVG_QUEUED_RC_TIME:执行 SQL 语句等待可用 RU 的平均耗时
  • MAX_QUEUED_RC_TIME:执行 SQL 语句等待可用 RU 的最大耗时
  • RESOURCE_GROUP:执行 SQL 语句绑定的资源组
3 个赞

查询执行时间长或消耗资源多的 SQL:
SELECT query, exec_count, avg_rpc_duration, max_rpc_duration
FROM information_schema.cluster_slow_query
WHERE start_time > ‘2025-07-14 00:00:00’ – 设置为你要检查的时间段
ORDER BY max_rpc_duration DESC LIMIT 10;

1 个赞

Dashboard中看TOP SQL

这么多天了。问题解决了么

1 个赞

RU是个什么参数

  • 开启 RU 消耗监控和告警:在 TiDB Dashboard 或第三方监控工具(Prometheus+Grafana)中,添加「RU 消耗率」告警(比如设置 80% 配额时告警),提前预警。
  • 限制高资源 SQL 的执行:通过 TiDB 资源控制策略,对单条 SQL 或单个用户设置 RU 上限(CREATE RESOURCE GROUP ... WITH RU_PER_SECOND = ...),避免单条 SQL 耗尽集群配额。
  • 定期分析 SQL 性能:每天定时查看 SQL 分析中的 Top RU 消耗 SQL,提前优化潜在的高资源 SQL。
  • 优化集群 GC 配置:确保 GC 任务正常执行,避免 MVCC 版本堆积,减少 RC 等待的诱因。
1 个赞

我们一边是看dashboard的慢查询去排查。

借助 TiDB Dashboard 可视化排查

  1. 进入 TiDB Dashboard → 「SQL 语句分析」页面,筛选维度选择「资源单元消耗」,时间范围选择 RU 突增时段,可直接查看 Top RU 消耗的 SQL;
  2. 进入「资源组监控」页面,查看对应资源组的 RU 消耗趋势,确认是否有 SQL 集中占用资源。

RU应该是指资源单元,应该是配了资源隔离,但是用超了吧。

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