8.0 新特性 - RESOURCE GROUP

前言

MySQL 是单进程多线程的程序,在 8.0 之前所有的线程优先级都是相同的,并且所有的线程资源都是共享的。8.0 之后推出 RESOURCE GROUP 特性 DBA 可以通过资源组的方式修改线程优先级以及所使用的资源,目前仅支持 CPU 资源。

1. 应用场景

业务上经常会有一些跑批操作,这些跑批 SQL 往往较复杂且涉及数据量大,执行起来非常消耗资源,往往是业务低峰夜间执行,避免影响其它线程运行避免 CPU 跑满,堵塞其它线程,导致请求进不去。有了 RESOURCE GROUP 特性,我们可以创建一个资源组,让跑批任务限制在固定的一个或多个 CPU 核上,避免影响其它线程。

2. 资源组介绍

查询现有的资源组,系统默认的资源组,无法进行修改或者删除。

select * from information_schema.resource_groups;

在这里插入图片描述
可以通过下方 SQL 查询资源组的使用情况,被哪些线程使用。

select * from performance_schema.threads\G

在这里插入图片描述
我们模拟要跑一个 UPDATE 批次任务,现在创建一个资源组。

CREATE RESOURCE GROUP Batch
  TYPE = USER
  VCPU = 0
  THREAD_PRIORITY = 10;

将线程与资源组绑定,设置的权重为 10

root@mysql 13:43:  [sbtest]>show processlist;
+----+-----------------+-----------+--------+---------+--------+------------------------+------------------+
| Id | User            | Host      | db     | Command | Time   | State                  | Info             |
+----+-----------------+-----------+--------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL   | Daemon  | 169216 | Waiting on empty queue | NULL             |
| 61 | root            | localhost | sbtest | Query   |      0 | init                   | show processlist |
| 62 | root            | localhost | NULL   | Sleep   |     13 |                        | NULL             |
+----+-----------------+-----------+--------+---------+--------+------------------------+------------------

会话 ID 等于 61 我们通过会话 ID 定位到线程 ID

select * from performance_schema.threads  where processlist_id = 61;

在这里插入图片描述
将线程与资源组进行绑定:

SET RESOURCE GROUP Batch FOR 115;

执行跑批任务,修改全表值。

root@mysql 13:49:  [sbtest]>update new set new_seenum = 17;
Query OK, 2000000 rows affected (1 min 16.57 sec)
Rows matched: 2000000  Changed: 2000000  Warnings: 0

下图为期间 CPU 使用率指标对比,使用资源组我们可以看到 CPU0 使用率为 100%,而未使用资源组时,CPU 负载还是比较均衡。
在这里插入图片描述

在这里插入图片描述

3. 资源组维护

创建资源组:

CREATE RESOURCE GROUP Batch
  TYPE = USER
  VCPU = 2-3            -- assumes a system with at least 4 CPUs
  THREAD_PRIORITY = 10;

将线程与资源组绑定:

SET RESOURCE GROUP Batch FOR 线程ID;

修改采用 Optimizer Hints 的方式指定 SQL 使用的资源组:

SELECT /*+ RESOURCE_GROUP(Batch) */ * FROM sbtest1;

修改资源组的配置:

ALTER RESOURCE GROUP Batch VCPU = 10-20;

修改资源组的优先级:

ALTER RESOURCE GROUP Batch THREAD_PRIORITY = 5;

禁用资源组:

ALTER RESOURCE GROUP Batch DISABLE FORCE;

删除资源组:

DROP RESOURCE GROUP Batch;

4. 资源组的限制

  • 如果安装了线程池插件,则资源组不可用。
  • 资源组在 macOS 上不可用,它没有提供用于将 CPU 绑定到线程的 API。
  • 目前只能绑定 CPU 资源,不能绑定其他资源。

参考:MySQL Resource Groups

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值