资源组介绍

简介

MySQL是单进程多线程的程序,MySQL线程包括后台线程(Master Thread、IO Thread、Purge Thread等),以及用户线程。在8.0之前,所有线程的优先级都是一样的,并且所有的线程的资源都是共享的。但是在MySQL8.0之后,由于Resource Group特性的引入,我们可以来通过资源组的方式修改线程的优先级以及所能使用的资源,可以指定不同的线程使用特定的资源。
在目前版本中DBA只能操控CPU资源,并且控制的最小力度为vCPU,即操作系统逻辑CPU核数(可以通过lscpu命令查看可控制CPU总数)。
DBA经常会遇到需要执行跑批任务的需求,这种跑批的SQL一般都是很复杂、运行时间长、消耗资源多的SQL。所以很多跑批任务都是在业务低峰期的时候执行,并且在从库上执行,尽可能降低对业务产生影响。但是对于一些数据一致性比较高的跑批任务,需要在主库上执行,在跑批任务运行的过程中很容易影响到其他线程的运行。那么现在Resource Group就是DBA的福音了,我们可以对跑批任务指定运行的资源组,限制任务使用的资源,减少对其他线程的影响。

资源组信息查看

  • INFORMATION_SCHEMA.RESOURCE_GROUPS

INFORMATION_SCHEMA库下的RESOURCE_GROUPS表中记录了所有定义的资源组的情况:

12345678
mysql> select * from information_schema.resource_groups;+---------------------+---------------------+------------------------+----------+-----------------+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |+---------------------+---------------------+------------------------+----------+-----------------+| USR_default         | USER                |                      1 | 0-23     |               0 || SYS_default | SYSTEM | 1 | 0-23 | 0 |+---------------------+---------------------+------------------------+----------+-----------------+2 rows in set (0.00 sec)

MySQL8.0默认会创建两个资源组,一个是USR_default另一个是SYS_default

  • PERFORMANCE_SCHEMA.THREADS

PERFORMANCE_SCHEMA库下的THREADS表中,可以查看当前线程使用资源组的情况:

1234567891011
mysql> mysql> select * from performance_schema.threads limit 5;+-----------+------------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+------------------+------------------+------+--------------+---------+-----------------+--------------+----------------+| THREAD_ID | NAME                         | TYPE       | PROCESSLIST_ID | PROCESSLIST_USER | PROCESSLIST_HOST | PROCESSLIST_DB | PROCESSLIST_COMMAND | PROCESSLIST_TIME | PROCESSLIST_STATE | PROCESSLIST_INFO | PARENT_THREAD_ID | ROLE | INSTRUMENTED | HISTORY | CONNECTION_TYPE | THREAD_OS_ID | RESOURCE_GROUP |+-----------+------------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+------------------+------------------+------+--------------+---------+-----------------+--------------+----------------+|         1 | thread/sql/main              | BACKGROUND |           NULL | NULL             | NULL             | mysql          | NULL                |            96053 | NULL              | NULL             |             NULL | NULL | YES          | YES     | NULL            |         9130 | SYS_default    || 3 | thread/innodb/io_ibuf_thread | BACKGROUND | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | YES | YES | NULL | 9135 | SYS_default || 4 | thread/innodb/io_log_thread | BACKGROUND | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | YES | YES | NULL | 9136 | SYS_default || 5 | thread/innodb/io_read_thread | BACKGROUND | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | YES | YES | NULL | 9138 | SYS_default || 6 | thread/innodb/io_read_thread | BACKGROUND | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | YES | YES | NULL | 9137 | SYS_default |+-----------+------------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+------------------+------------------+------+--------------+---------+-----------------+--------------+----------------+5 rows in set (0.00 sec)

其中RESOURCE_GROUP字段显示线程使用的是哪个资源组。

如何使用资源组

假设我们现在需要对跑批任务创建一个资源组。

创建一个资源组

123456789101112131415
mysql> CREATE RESOURCE GROUP Batch    ->   TYPE = USER    ->   VCPU = 2-3    ->   THREAD_PRIORITY = 10;Query OK, 0 rows affected (0.03 sec)

mysql> select * from information_schema.resource_groups;+---------------------+---------------------+------------------------+----------+-----------------+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |+---------------------+---------------------+------------------------+----------+-----------------+| USR_default | USER | 1 | 0-23 | 0 || SYS_default | SYSTEM | 1 | 0-23 | 0 || Batch | USER | 1 | 2-3 | 10 |+---------------------+---------------------+------------------------+----------+-----------------+3 rows in set (0.00 sec)

指定使用资源组

将创建的Batch资源组绑定到执行的线程上,有两种方式:

  • 方式一
    从PERFORMANCE_SCHEMA.THREADS表中查找需要绑定执行的线程ID(注意:THREADS表中的THREAD_ID和SHOW PROCESSLIST的ID不等同):

查看需要绑定需要的线程的THREAD_ID:

12345678
mysql> select * from performance_schema.threads where TYPE='FOREGROUND';+-----------+--------------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+------------------------------------------------------------------+------------------+------+--------------+---------+-----------------+--------------+----------------+| THREAD_ID | NAME                           | TYPE       | PROCESSLIST_ID | PROCESSLIST_USER | PROCESSLIST_HOST | PROCESSLIST_DB | PROCESSLIST_COMMAND | PROCESSLIST_TIME | PROCESSLIST_STATE | PROCESSLIST_INFO                                                 | PARENT_THREAD_ID | ROLE | INSTRUMENTED | HISTORY | CONNECTION_TYPE | THREAD_OS_ID | RESOURCE_GROUP |+-----------+--------------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+------------------------------------------------------------------+------------------+------+--------------+---------+-----------------+--------------+----------------+|        61 | thread/sql/compress_gtid_table | FOREGROUND |              5 | NULL             | NULL             | NULL           | Daemon              |            96613 | Suspending        | NULL                                                             |                1 | NULL | YES          | YES     | NULL            |         9211 | SYS_default    || 65 | thread/sql/one_connection | FOREGROUND | 10 | root | localhost | NULL | Query | 0 | Sending data | select * from performance_schema.threads where TYPE='FOREGROUND' | NULL | NULL | YES | YES | Socket | 9741 | USR_default |+-----------+--------------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+------------------------------------------------------------------+------------------+------+--------------+---------+-----------------+--------------+----------------+2 rows in set (0.00 sec)

绑定将线程与Batch资源组绑定:

1
SET RESOURCE GROUP Batch FOR 65;

查看绑定结果:

12345678
mysql> select THREAD_ID,NAME,TYPE,PROCESSLIST_ID,RESOURCE_GROUP from performance_schema.threads where TYPE='FOREGROUND';+-----------+--------------------------------+------------+----------------+----------------+| THREAD_ID | NAME                           | TYPE       | PROCESSLIST_ID | RESOURCE_GROUP |+-----------+--------------------------------+------------+----------------+----------------+|        61 | thread/sql/compress_gtid_table | FOREGROUND |              5 | SYS_default    || 65 | thread/sql/one_connection | FOREGROUND | 10 | Batch |+-----------+--------------------------------+------------+----------------+----------------+2 rows in set (0.00 sec)
  • 方式二

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

1
SELECT /*+ RESOURCE_GROUP(Batch) */ * FROM t2 ;

修改资源组配置

可能跑批任务使用CPU资源不够,那就需要修改资源组的配置。

1
ALTER RESOURCE GROUP Batch VCPU = 10-20;

修改资源组优先级:

1
ALTER RESOURCE GROUP Batch THREAD_PRIORITY = 5;

禁止使用资源组:

1
ALTER RESOURCE GROUP Batch DISABLE FORCE;

删除资源组

对于不用的资源组可以删除

1
DROP RESOURCE GROUP Batch;

使用注意点

  • CREATE RESOURCE GROUP、ALTER RESOURCE GROUP、DROP RESOURCE GROUP等SQL语句并不会被记录到binlog中,不会被复制到从库。
  • 如果MySQL安装了thread pool插件,无法使用RESOURCE GROUP特性
  • macOS 平台上不支持RESOURCE GROUP特性
  • FreeBSD 和 Solaris 平台上无法指定资源组优先级(priorities),所有线程运行在0状态。
  • Linux 平台上需要开启 CAP_SYS_NICE 特性才能使用RESOURCE GROUP
123456789101112
检查mysqld进程是否开启CAP_SYS_NICE特性[root@qdata-sto3 /root]#getcap /home/mysql/program/mysql8.0/bin/mysqld

给mysqld进程开启CAP_SYS_NICE特性[root@qdata-sto3 /root]#setcap cap_sys_nice+ep /home/mysql/program/mysql8.0/bin/mysqld

检查是否开启成功[root@qdata-sto3 /root]#getcap /home/mysql/program/mysql8.0/bin/mysqld/home/mysql/program/mysql8.0/bin/mysqld = cap_sys_nice+ep
  • Windows平台上线程优先级只有5个等级,分别为THREAD_PRIORITY_HIGHEST、THREAD_PRIORITY_ABOVE_NORMAL、THREAD_PRIORITY_NORMAL、THREAD_PRIORITY_BELOW_NORMAL、THREAD_PRIORITY_LOWEST

总结

Resource Group是MySQL在8.0中增加的资源管理的特性,从一个DBA的角度,可以更加灵活、便捷的管理数据库使用的资源,这是一个令人眼前一亮的特性。Oracle在10g的时候已经推出了Resource Manager的特性,MySQL的Resource Group目前还很简单只能控制CPU的资源,但是相信后续Resource Group能操控的资源类型会越来越多。期待MySQL8.0早日成为一个成熟稳定的版本。

转载于:https://www.cnblogs.com/DataArt/p/10240556.html

MySQL8.0——Resource Group(资源组)相关推荐

  1. mysql8.0 的新特性_What's New In MySQL 8.0(MySQL 8.0 新特性)

    由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gcc耗时较 ...

  2. mysql8.0创建属性_MySQL8.0新特性——资源管理

    MySQL8.0--资源管理: 参考官方文档: https://dev.mysql.com/doc/refman/8.0/en/resource-groups.html MySQL支持资源组的创建和管 ...

  3. centos7使用yum安装MySQL8.0

    centos7使用yum安装MySQL8.0 1. 添加MySQL的yum资源 2. yum安装MySQL社区版 3. 启动MySQL并且设置开机自启 4. 修改root密码为简单密码 5. 设置远程 ...

  4. mysql8.0卡cpu_MySQL 8.0资源组有效解决慢SQL引发CPU告警

    MySQL 8.0资源组有效解决慢SQL引发CPU告警 发布时间:2020-02-21 00:26:29 来源:51CTO 阅读:303 作者:hcymysql 资源组的作用是资源隔离(你可以理解为开 ...

  5. Mysql8 group replication组复制集群单主多主模式切换

    Mysql8 MGR集群操作图解 声明与简介 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理.本文主要介绍mysql的MGR集群的操作. My ...

  6. Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)

    1. Hadoop 2.0 中的资源管理 http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/ Hadoop ...

  7. Scom 2012 中的资源组(Resource Pool)

    SCOM 2012 中新增了资源组的概念,Resource Pool,但是这个是什么用途呢?官方的描述说:A resource pool is a collection of management s ...

  8. columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 版本mysql8.0

    问题如下: ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonagg ...

  9. mysql8.0版本的服务器名称_MySQL 8.0安装部署-运维笔记

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一.  Mysql8.0版本相比之前版本的一些特性 1) ...

最新文章

  1. 提权 调试权限 OpenProcess 拒绝访问的解决办法
  2. 2015年第六届蓝桥杯 - 省赛 - C/C++大学A组 - G. 手链样式
  3. .NET Core Session的简单使用
  4. 机器学习和统计里面的auc怎么理解?
  5. PHP之MVC项目实战
  6. php 用户之间通信,PHP,javascript,ajax-2位用户之间的通信
  7. 无极浏览器(教学专用浏览器)官方版 v5.0.0.15
  8. zzulioj1001C语言答案,ZZULIOJ
  9. 后端和前端有什么区别,哪个工资高?
  10. 四川大学计算机在线作业,四川大学计算机操作系统试题
  11. 1 年原创 150+ 篇,这位前阿里 P9 牛批!
  12. 牛客网 Cutting Bamboos 【主席树+二分】
  13. SVN 报错:does not support the HTTP/DAV protocol
  14. NB-IOT 协议介绍
  15. JNLP和java web start
  16. 6.824-lab1
  17. Linux ALSA声卡驱动之三:Platform之Cpu_dai
  18. 实验室基本的专业知识
  19. MarkDown语法学习教程,2分钟学会速写个人GitHub,轻量化,快捷,迅速,方便.
  20. html微信公众平台,微信公众号平台.html

热门文章

  1. 转:Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
  2. 自己封装的ASP.NET的SQLITE数据库的操作类
  3. 和谐社区,和谐技术:微软的宠儿们,为什么富人的孩子就不能早当家?
  4. 震惊!!!这才是代码!!
  5. 技压群雄!2021 NTIRE @CVPR 2021的三冠一亚视频超分方案:BasicVSR++
  6. Scale Match:国科大提出小目标检测的尺度匹配方法,用于预训练数据集处理
  7. jsp为什么不加虚拟路径都能访问_JavaWeb学习笔记一(环境配置/jsp基本介绍)
  8. 对于0基础来说,Python 中有哪些难以理解的概念?我似乎明白了
  9. Python实现一个简单的毕业生信息管理系统的示例代码!非常简单
  10. 【TensorFlow】TensorFlow从浅入深系列之十二 -- 教你深入理解卷积神经网络中的池化层