MySQL 8 中新增的资源管理特性---发表到3306pai社区

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 8 开始支持使用资源组控制系统CPU资源的分配,将服务器内运行的线程分配给特定组,以便线程根据组可用的资源执行。

资源管理

MySQL 8 开始支持使用资源组控制系统CPU资源的分配,将服务器内运行的线程分配给特定组,以便线程根据组可用的资源执行。组属性可以控制其资源,包括VCPU的个数和线程的优先级。DBA可以根据不同的工作负载修改这些属性。

默认情况下,有一个系统组和一个用户组,分别名为SYS_default和 USR_default。无法删除这些默认组,并且无法修改其属性。每个默认组都没有CPU关联,优先级为0。


资源组属性

每个组都有一个名字。资源组名称是表和列名称之类的标识符。组名称不区分大小写,最长可达64个字符。

每个组都有一个类型,或者是 SYSTEM或者USER。对于系统资源组,允许的优先级范围是-20到0,对于用户资源组,允许的优先级范围是0到19。系统组的优先级高于用户组,确保用户线程的优先级不会高于系统线程。

CPU亲缘关系是资源组可以使用的一组虚拟CPU。亲和关系可以是可用CPU的任何非空子集。如果组没有亲和力,则可以使用所有可用的CPU。

线程优先级是分配给资源组的线程的执行优先级。优先级值的范围从-20(最高优先级)到19(最低优先级)。系统组和用户组的默认优先级均为0。

可以启用或禁用每个组,从而使管理员可以控制线程分配。线程只能分配给已启用的组。

前面两个资源组属性创建时定义,其它属性在资源组创建时定义,并且可以在以后的任何时间进行修改。


默认资源组

默认资源组有两个: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组。


创建资源组

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


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


将线程分配给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);


修改资源组属性

对于系统高负载的时间,减少分配给组的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;


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服务


Windows上的优先级对应

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

image.png



资源组的限制:

如果安装了线程池插件,则资源组不可用。

资源组在macOS上不可用,它不提供用于将CPU绑定到线程的API。

在FreeBSD和Solaris上,忽略资源组线程优先级。(实际上,所有线程都以优先级0运行。)尝试更改优先级会导致警告

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
MySQL8.0索引新特性
MySQL8.0索引新特性
48 0
|
1月前
|
JSON 关系型数据库 MySQL
MySQL 8.0 新特性
MySQL 8.0 新特性
116 10
MySQL 8.0 新特性
|
1月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
202 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
14天前
|
SQL 安全 关系型数据库
MySQL8.2有哪些新特性?
【10月更文挑战第3天】MySQL8.2有哪些新特性?
28 2
|
17天前
|
关系型数据库 MySQL 数据库
DZ社区 mysql日志清理 Discuz! X3.5数据库可以做定期常规清理的表
很多站长在网站日常维护中忽略了比较重要的一个环节,就是对于数据库的清理工作,造成数据库使用量增加必须多的原因一般有2个:后台站点功能开启了家园,此功能现在很少有论坛会用到,但是灌水机会灌入大量垃圾信息致使站长长时间未能发觉;再有就是程序默认的一些通知类表单会存放大量的、对于网站日常运行并无意义的通知信息。
34 2
|
2月前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
2月前
|
SQL 算法 关系型数据库
(二十)MySQL特性篇:2022年的我们,必须要懂的那些数据库新技术!
 MySQL数据库从1995年诞生至今,已经过去了二十多个年头了,到2022.04.26日为止,MySQL8.0.29正式发行了GA版本,在此之前版本也发生了多次迭代,发行了大大小小N多个版本,其中每个版本中都有各自的新特性,所有版本的特性加起来,用一本书的篇幅也无法完全阐述清楚,因此本章主要会挑重点特性来讲,具体各版本的特性可参考MySQL官网的开发手册。
118 1
|
2月前
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
|
2月前
|
机器学习/深度学习 存储 缓存
模型遇见知识图谱问题之参与阿里云机器学习团队的开源社区的问题如何解决
模型遇见知识图谱问题之参与阿里云机器学习团队的开源社区的问题如何解决
|
4月前
|
关系型数据库 MySQL 测试技术
深入探索MySQL 8:隐藏索引与降序索引的新特性
深入探索MySQL 8:隐藏索引与降序索引的新特性