0027. MySQL 8.0 新特性 - 资源管理
1. 📝 概述
- 资源组(Resource Groups)
- MySQL 8.0 引入了 资源组(Resource Groups) 这一重要特性,首次实现了对数据库线程资源的细粒度控制和调度,使你能够根据业务需求动态分配 CPU 资源和优先级,适用于多租户、混合负载等复杂场景。
- 你可以把“资源组”想象成一个“资源容器”,你可以把某些数据库线程分配到这个容器中,并限制它能使用的 CPU 核心、优先级等资源。
- 这是 MySQL 8.0 的全新功能之一,在之前的版本中是不支持的。
特性 | MySQL 8.0 之前 | MySQL 8.0 及之后 |
---|---|---|
资源控制能力 | 几乎没有,无法直接控制线程使用的 CPU 或优先级 | 支持通过资源组进行线程级别的资源控制 |
多租户支持 | 非常有限 | 可以将不同用户的线程分配到不同的资源组,实现隔离 |
工作负载管理 | 无法区分 OLTP 和 OLAP 查询资源使用 | 可以为不同类型的工作负载设置不同的资源策略 |
- 资源组的核心功能
- 线程绑定资源组:可以将某个线程(比如某个用户或查询)绑定到特定资源组。
- CPU 绑定(CPU affinity):指定该资源组中的线程只能运行在哪些 CPU 核心上。
- 优先级设置:为资源组设定优先级,影响线程调度顺序。
- 资源隔离:防止某一类任务(如报表查询)占用过多系统资源,影响其他业务。
- 适用场景
场景 | 说明 |
---|---|
多租户架构 | 不同客户的应用共享同一个数据库实例时,可通过资源组隔离资源使用 |
混合负载系统 | 同时运行 OLTP(高并发事务)和 OLAP(复杂分析查询),资源组可避免资源争用 |
关键业务保障 | 保证核心业务线程始终有足够 CPU 资源可用,不受非关键任务影响 |
- 一些注意事项
- 当前资源组功能主要支持 Linux 平台(需要内核支持
cpuset
和nice
权限)。 - 需要管理员权限才能创建和修改资源组。
- 不是所有类型的线程都可以绑定资源组,主要是用户线程(如连接线程)。
- 当前资源组功能主要支持 Linux 平台(需要内核支持
2. 💻 资源管理示例
sql
-- 创建资源组 --------------------------------------------------
CREATE RESOURCE GROUP oltp_group
TYPE = USER
VCPU = 0,1
THREAD_PRIORITY = 0;
-- oltp_group:用于处理高优先级的 OLTP 事务,绑定到 CPU 0 和 1。
CREATE RESOURCE GROUP report_group
TYPE = USER
VCPU = 2,3
THREAD_PRIORITY = -20;
-- report_group:用于低优先级的报表查询,绑定到 CPU 2 和 3,优先级较低。
-- 将当前会话绑定到资源组 -----------------------------------------
SET RESOURCE GROUP report_group;
-- 执行这条语句后,当前连接的所有 SQL 查询都会运行在这个资源组中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18