MySQL RESOURCE GROUP 怎样为查询分配 CPU 资源
MySQL RESOURCE GROUP 适合处理“某类线程应该使用哪些 CPU、以什么优先级运行”的治理问题。它不是给单条 SQL 设定固定 CPU 配额,而是把服务器线程关联到资源组,再由资源组的 CPU 亲和性和线程优先级影响执行环境。
官方地址:https://dev.mysql.com/doc/refman/8.4/en/resource-groups.html
最小可用路径是:确认平台和权限,创建一个启用的 USER 资源组;用
SET RESOURCE GROUP绑定当前会话或线程,必要时用RESOURCE_GROUPhint 只影响一条语句;最后从INFORMATION_SCHEMA.RESOURCE_GROUPS和performance_schema.threads读取归属。资源组管理只在当前服务器生效,不会通过复制自动传播。
先确认资源组能不能用
MySQL 8.4 把可管理的资源抽象为 virtual CPU,资源组可以设置非空 CPU 集合、线程优先级和启用状态。默认组 SYS_default 与 USR_default 不能删除或修改。资源组依赖平台能力:线程池插件启用时不可用,macOS 不提供 CPU 绑定所需的接口;Linux 上调整线程优先级还可能需要服务进程具备 CAP_SYS_NICE。
创建和修改资源组需要 RESOURCE_GROUP_ADMIN;管理线程归属通常需要 RESOURCE_GROUP_ADMIN 或 RESOURCE_GROUP_USER。先把这些前提写进运行手册,避免把“语句执行成功”误认为“CPU 治理已经生效”。

创建一个可回收的 USER 资源组
下面示例创建一个名为 report_low 的 USER 组,把它限制到虚拟 CPU 2 和 3,并使用较低的用户线程优先级。CPU 编号必须来自当前服务器可用的 virtual CPU;示例值用于说明语义,不能直接假定每台机器都有相同编号。
-- 创建一个可回收的用户组:只管理报表类线程,不改变默认组。
CREATE RESOURCE GROUP report_low
TYPE = USER
VCPU = 2, 3
THREAD_PRIORITY = 10
ENABLE;
-- 读取定义,确认名称、类型、启用状态和 CPU 集合。
SELECT RESOURCE_GROUP_NAME,
RESOURCE_GROUP_TYPE,
RESOURCE_GROUP_ENABLED,
VCPU_IDS,
THREAD_PRIORITY
FROM INFORMATION_SCHEMA.RESOURCE_GROUPS
WHERE RESOURCE_GROUP_NAME = 'report_low';
USER 组的线程优先级范围是 0 到 19,数值越大优先级越低;SYSTEM 组的范围是 -20 到 0。不要为了“提高报表优先级”把普通业务线程放到 SYSTEM 组,系统线程与用户线程的优先级边界本来就是隔离的。
把会话或单条语句绑定到资源组
如果一批报表查询共享一个会话,可以使用 SET RESOURCE GROUP 改变目标线程的资源组;如果只想影响一条语句,则使用优化器 hint,避免把同一连接后续的所有查询都带入低优先级组。
-- 当前会话切换到报表组;后续语句会沿用该线程归属。
SET RESOURCE GROUP report_low;
-- 只把这一条查询交给报表组,避免改变会话后续语句。
SELECT /*+ RESOURCE_GROUP(report_low) */
department_id, COUNT(*) AS total
FROM report_events
GROUP BY department_id;
-- 查询结束后恢复默认用户组,释放临时治理边界。
SET RESOURCE GROUP USR_default;
会话绑定和语句 hint 是两个不同粒度:前者改变线程归属,后者只声明当前语句的资源组。若资源组被禁用,线程不能继续分配到该组;删除前也要先让线程回到默认组或其它仍启用的组。

从系统表读取归属并安排清理
INFORMATION_SCHEMA.RESOURCE_GROUPS 适合看资源组定义,performance_schema.threads 适合看服务器线程当前关联的资源组。两者分别回答“组怎么定义”和“线程现在归谁”,不要只看创建语句返回成功。
-- 查看资源组定义:确认治理参数仍符合运行手册。
SELECT *
FROM INFORMATION_SCHEMA.RESOURCE_GROUPS
WHERE RESOURCE_GROUP_NAME IN ('report_low', 'USR_default');
-- 查看线程归属:按当前连接的 THREAD_ID 对照资源组名称。
SELECT THREAD_ID, PROCESSLIST_ID, NAME, TYPE, RESOURCE_GROUP
FROM performance_schema.threads
WHERE RESOURCE_GROUP IN ('report_low', 'USR_default');
资源组定义保存在数据字典中,但资源组管理语句和修改不会写入 binary log,也不会复制到其它服务器。因此主从或集群环境要分别建立资源组,不要期待切换后远端节点自动拥有同名配置。
常见追问
资源组是不是 SQL 的固定 CPU 配额?
不是。它主要通过 CPU 亲和性和线程优先级治理线程执行条件,不等同于每条 SQL 的硬配额或准确的 CPU 百分比承诺。
为什么创建成功但优先级没有变化?
先看平台限制、服务进程权限和线程是否真的属于目标组。FreeBSD、Solaris 等平台可能忽略线程优先级;Linux 还可能需要 CAP_SYS_NICE。
实际落地时可以记住三件事:资源组先验证平台和权限,绑定时区分会话级与语句级,清理时把线程恢复到默认组。这样它才是可回收的查询治理边界,而不是一组只创建不观察的配置。
MySQL 复制过滤规则的风险隔离方法
- 上一篇
- MySQL 复制过滤规则的风险隔离方法
- 下一篇
- Redis GEOSEARCH 查询附近地点的范围条件
-
- 数据库 · MySQL | 1小时前 | MySQL · 主从复制 · 数据一致性 MySQL复制 replicate-wild-do-table 复制过滤 CHANGE REPLICATION FILTER
- MySQL 复制过滤规则的风险隔离方法
- 102浏览 收藏
-
- 数据库 · MySQL | 1小时前 | MySQL · InnoDB ·
- MySQL Instant DDL 变更列属性的边界
- 133浏览 收藏
-
- 数据库 · MySQL | 1小时前 |
- MySQL 重命名列时怎样避免旧应用读写失败
- 450浏览 收藏
-
- 数据库 · MySQL | 1小时前 | mysql 空间索引 SRID 地理范围 MBRIntersects
- MySQL 空间索引支持地理范围筛选的设计
- 114浏览 收藏
-
- 数据库 · MySQL | 1小时前 | MySQL · 主从复制 · 数据库运维 · 主从切换 MySQL GTID GTID自动定位 read_only super_read_only CHANGE REPLICATION SOURCE TO
- MySQL GTID 主从切换的检查清单
- 391浏览 收藏
-
- 数据库 · MySQL | 1小时前 |
- MySQL DDL 被元数据锁阻塞的定位方案
- 324浏览 收藏
-
- 数据库 · MySQL | 1小时前 |
- MySQL 直方图改善低基数条件估算的配置
- 163浏览 收藏
-
- 数据库 · MySQL | 1小时前 | 执行计划 · 查询优化 · mysql 执行计划 SHOW PROCESSLIST PROCESS权限 EXPLAIN FOR CONNECTION
- MySQL EXPLAIN FOR CONNECTION 为什么拿不到正在执行的计划
- 256浏览 收藏
-
- 数据库 · MySQL | 1小时前 |
- MySQL JSON 路径查询的生成列索引设计
- 296浏览 收藏
-
- 数据库 · MySQL | 1天前 | mysql事务 · InnoDB · mysql READ ONLY transaction_read_only 只读事务 START TRANSACTION
- MySQL 只读事务怎样减少误写风险
- 439浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 497次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 552次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 579次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 532次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 343次使用
-
- MySQL 明明加了索引,为什么查询还是很慢?先查这 6 个点
- 2026-06-27 374浏览
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- golang 基于 mysql 简单实现分布式读写锁
- 2023-01-07 384浏览
-
- 详解如何利用GORM实现MySQL事务
- 2023-01-07 184浏览
-
- Go语言实现操作MySQL的基础知识总结
- 2023-01-23 265浏览
