TiDB 如何限制单条 SQL 资源占用,防止大 SQL 拖垮集群?

高并发场景下偶尔出现超大查询占用大量资源,影响整体业务,请问如何限制单 SQL 的 CPU、内存与执行时长?

2 个赞

可通过以下几类核心参数进行限制:
内存限制:用 tidb_mem_quota_query(单条SQL内存阈值,默认1GB),行为由 tidb_mem_oom_action 控制;实例级用 tidb_server_memory_limit(TiDB实例内存上限)。
执行时间限制:用 HINT MAX_EXECUTION_TIME 控制单条SQL的执行时间(精度约100ms)。
资源组隔离:通过 CREATE/ALTER RESOURCE GROUP 限制 RU 吞吐量。
大查询熔断:用 Runaway Queries 机制,设定 EXEC_ELAPSED(执行时长)、PROCESSED_KEYS 等条件,触发 KILLCOOLDOWNSWITCH_GROUP 等动作。

1 个赞

高并发防大 SQL 雪崩:用 stmt_timeout 控时长、mem_quota 控内存、资源组 RU 控 CPU、Runaway 自动杀、Binding 精准封,五大手段彻底隔离大 SQL,保护核心业务稳定。

1 个赞

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