学习
实践
活动
专区
工具
TVP
写文章
专栏首页「3306 Pai」社区MySQL 8 中新增的资源管理特性

MySQL 8 中新增的资源管理特性

1. 资源管理

MySQL 8 开始支持使用资源组控制系统CPU资源的分配,将服务器内运行的线程分配给特定组,以便线程根据组可用的资源执行。组属性可以控制其资源,包括VCPU的个数和线程的优先级。DBA可以根据不同的工作负载修改这些属性。 默认情况下,有一个系统组和一个用户组,分别名为SYS_default和 USR_default。无法删除这些默认组,并且无法修改其属性。每个默认组都没有CPU关联,优先级为0

2.资源组属性

每个组都有一个名字。资源组名称是表和列名称之类的标识符。组名称不区分大小写,最长可达64个字符。 每个组都有一个类型,或者是 SYSTEM或者USER。对于系统资源组,允许的优先级范围是-20到0,对于用户资源组,允许的优先级范围是0到19。系统组的优先级高于用户组,确保用户线程的优先级不会高于系统线程。 CPU亲缘关系是资源组可以使用的一组虚拟CPU。亲和关系可以是可用CPU的任何非空子集。如果组没有亲和力,则可以使用所有可用的CPU。 线程优先级是分配给资源组的线程的执行优先级。优先级值的范围从-20(最高优先级)到19(最低优先级)。系统组和用户组的默认优先级均为0。 可以启用或禁用每个组,从而使管理员可以控制线程分配。线程只能分配给已启用的组。 前面两个资源组属性创建时定义,其它属性在资源组创建时定义,并且可以在以后的任何时间进行修改。

3.默认资源组

默认资源组有两个:SYS_default和 USR_default组

mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS\G
*************************** 1. row ***************************
   RESOURCE_GROUP_NAME: USR_default
   RESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1
              VCPU_IDS: 0-3
       THREAD_PRIORITY: 0
*************************** 2. row ***************************
   RESOURCE_GROUP_NAME: SYS_default
   RESOURCE_GROUP_TYPE: SYSTEM
RESOURCE_GROUP_ENABLED: 1
              VCPU_IDS: 0-3
       THREAD_PRIORITY: 0

新创建的系统和用户线程分别分配给 SYS_default和 USR_default组

4.创建资源组

例子:创建一个用户资源组:

CREATE RESOURCE GROUP Batch
  TYPE = USER
  VCPU = 2-3          
  THREAD_PRIORITY = 10;
mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS    WHERE RESOURCE_GROUP_NAME = 'Batch'\G   ---查看这个用户资源组
*************************** 1. row ***************************
   RESOURCE_GROUP_NAME: Batch
   RESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1
              VCPU_IDS: 2-3
       THREAD_PRIORITY: 10

5.将线程分配给Batch组

要将线程分配给Batch组,请执行以下操作:

SET RESOURCE GROUP Batch FOR thread_id;

如果自己的当前线程应该在 Batch组中,请在会话中执行以下语句:

SET RESOURCE GROUP Batch;

此后,会话中的语句将使用Batch组资源执行 。

要使用Batch组执行单个语句 ,请使用 RESOURCE_GROUP优化程序提示:

INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);

6. 修改资源组属性

对于系统高负载的时间,减少分配给组的CPU数量,降低其优先级:

ALTER RESOURCE GROUP Batch  VCPU = 3   THREAD_PRIORITY = 19;

在系统负载较轻的情况下,增加分配给组的CPU数量,提高其优先级:

ALTER RESOURCE GROUP Batch  VCPU = 0-3  THREAD_PRIORITY = 0;

注意:用户线程的优先级范围

mysql> ALTER RESOURCE GROUP Batch  VCPU = 3   THREAD_PRIORITY = -9;
ERROR 3654 (HY000): Invalid thread priority value -9 for User resource group Batch. Allowed range is [0, 19].

激活资源组

ALTER RESOURCE GROUP Batch enable;

7.Linux上设置线程优先级

在Linux上,除非CAP_SYS_NICE设置了功能,否则将忽略资源组线程优先级,也就是THREAD_PRIORITY项将是0。 CAP_SYS_NICE可以使用setcap 命令手动设置该功能,可以使用getcap检查功能。例如:

root@scutech:~#  setcap cap_sys_nice+ep /usr/sbin/mysqld
root@scutech:~# getcap /usr/sbin/mysqld
/usr/sbin/mysqld = cap_sys_nice+ep

或者使用sudo systemctl edit mysql增加下面的内容:

[Service]
AmbientCapabilities=CAP_SYS_NICE

然后重新启动mysql服务

8.Windows上的优先级对应

在Windows上,线程以五个线程优先级之一运行。资源组线程优先级范围-20到19映射到这些级别

9. 资源组的限制

1. 如果安装了线程池插件,则资源组不可用。 2. 资源组在macOS上不可用,它不提供用于将CPU绑定到线程的API。 3. 在FreeBSD和Solaris上,忽略资源组线程优先级。(实际上,所有线程都以优先级0运行。)尝试更改优先级会导致警告

文章分享自微信公众号:
3306pai

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:姚远
原始发表时间:2020-05-26
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • MySQL 8的关键新特性

    MySQL的第八个版本蓄势待发,并有望于2018年发布。在MySQL 5.7.9的首个通用版本推出后的28个月内,MySQL 8发布了从8.0.0到8.0.4这...

    星哥玩云
  • MySQL 8.0中的新增功能

    原文:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/

    shaonbean
  • 编程没有银弹:探讨Java8新增特性的优缺点

    Java 8或许是 迄今为止最令人期待的Java版本,最初定于今年的9月份发布,但由于一系列的安全漏洞问题,目前已推迟到明年的3月份。

    其悄悄
  • 8.MySQL用查找的方法直接新增数据

    小雨的分享社区
  • Java 8 开始新增的 Optional 类 - Optional 中的方法

    ifPresent() 方法能够让我们在对对象进行下一步操作之前判断我们需要操作的对象是否为 Null,在没有 Optional 对象之前,我们通常使用下面的方...

    HoneyMoose
  • springboot的JPA在Mysql8新增记录失败的问题

    springboot版本是1.3.0.M1,连接的mysql版本为8,用spring-boot-starter-data-jpa操作数据库,新增记录时应用抛出以...

    程序员欣宸
  • Java8中的新特性—流式编程

    首先,在学习流式编程前,首先应当知道同样为Java8中新特性的lambda表达式,相信编程基础还不错的同学在python或其他语言中也了解过,这里我只贴出一篇学...

    崔笑颜
  • 【JDK8 新特性 8】JDK 8新增的Optional类&新的日期和时间 API & 重复注解与类型注解

    上一篇文章:【JDK8 新特性 7】并行的Stream流&parallelStream背后的技术_一切总会归于平淡的博客-CSDN博客

    一切总会归于平淡
  • Java 8 开始新增的 Optional 类 - Optional 对象中的异常

    在 orElse() 和 orElseGet() 方法之外,JDK 还添加了一个 orElseThrow() 方法,JDK 使用这个方法来处理对象为空的情况。

    HoneyMoose
  • Java 8 开始新增的 Optional 类 - Optional 对象中的返回

    在对 Optional 对象完成一些检查和校验后,我们可以使用 get() 方法来返回对象中的值。

    HoneyMoose
  • MySQL 8 新特性之自增主键的持久化

    自增主键没有持久化是个比较早的bug,这点从其在官方bug网站的id号也可看出(https://bugs.MySQL.com/bug.php?id=199)。由...

    星哥玩云
  • MySQL8中的函数索引

    最近翻了下percona blog,发现 MySQL从8.0.13也引入了函数索引了,这个特性貌似在PG很早就具备了。。。

    二狗不要跑
  • 【说站】mysql中Memory存储引擎的特性

    以上就是mysql中Memory存储引擎的特性,希望对大家有所帮助。更多mysql学习指路:Mysql

    很酷的站长
  • MYSQL 中的查询技巧 与 MYSQL 8 并行查询

    最近公司的系统一点点的开始了拆分,从ORACLE 转移到 MYSQL 中,部分程序员的想法在使用MYSQL中还是没有转变过来,直接将ORALCE中的查询语句直接...

    AustinDatabases
  • java8新特性中lambda表达式的使用

    最近工作中使用到了lambda表达式,不是很理解,就去学习了一下,通过了解发现真的特别好用。就像下面这样,几行代码完成了java8之前很多行才能完成的任务量。下...

    jiankang666
  • 【JDK8 新特性 6】收集Stream流中的结果

    上一篇文章 : (9条消息) 【JDK8 新特性 5】Stream流介绍和常用方法的使用_一切总会归于平淡的博客-CSDN博客

    一切总会归于平淡
  • 一篇文章搞定——JDK8中新增的StampedLock

    StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使...

    须臾之余
  • Mysql8中降序索引的底层实现

    asc表示的是升序,使用这种语法创建出来的索引叫做升序索引。也就是我们平时在创建索引的时候,创建的都是升序索引。

    猿天地
  • 技术译文 | MySQL 8 中检查约束的使用

    本文来源:https://www.percona.com/blog/2020/10/02/how-to-use-check-constraint-in-mysq...

    爱可生开源社区

扫码关注腾讯云开发者

领取腾讯云代金券