当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL RESOURCE GROUP 怎样为查询分配 CPU 资源

MySQL RESOURCE GROUP 怎样为查询分配 CPU 资源

来源:17golang原创 2026-10-16 22:41:11 0浏览 收藏

MySQL RESOURCE GROUP 适合处理“某类线程应该使用哪些 CPU、以什么优先级运行”的治理问题。它不是给单条 SQL 设定固定 CPU 配额,而是把服务器线程关联到资源组,再由资源组的 CPU 亲和性和线程优先级影响执行环境。

官方地址:https://dev.mysql.com/doc/refman/8.4/en/resource-groups.html

最小可用路径是:确认平台和权限,创建一个启用的 USER 资源组;用 SET RESOURCE GROUP 绑定当前会话或线程,必要时用 RESOURCE_GROUP hint 只影响一条语句;最后从 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 治理已经生效”。

MySQL 资源组、CPU 亲和性、线程优先级与查询线程的静态关系说明图
图1:资源组定义说明图,查看资源组属性如何连接到 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 是两个不同粒度:前者改变线程归属,后者只声明当前语句的资源组。若资源组被禁用,线程不能继续分配到该组;删除前也要先让线程回到默认组或其它仍启用的组。

MySQL SET RESOURCE GROUP、RESOURCE_GROUP hint、查询线程和默认用户组的静态关系说明图
图2:线程归属说明图,比较会话级绑定与单语句 hint 的范围,并标出恢复到 USR_default 的回收边界;这是静态结构图,不是运行截图。

从系统表读取归属并安排清理

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。

实际落地时可以记住三件事:资源组先验证平台和权限,绑定时区分会话级与语句级,清理时把线程恢复到默认组。这样它才是可回收的查询治理边界,而不是一组只创建不观察的配置。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
MySQL 复制过滤规则的风险隔离方法MySQL 复制过滤规则的风险隔离方法
上一篇
MySQL 复制过滤规则的风险隔离方法
Redis GEOSEARCH 查询附近地点的范围条件
下一篇
Redis GEOSEARCH 查询附近地点的范围条件
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    497次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    552次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    579次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    532次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    343次使用