MySQL · 特性分析 · MySQL 8.0 资源组 (Resource Groups)

MySQL 8.0已经正式发布。这个版本包含很多有意思的特性,例如,更快、性能更好的Schema和Information Schema、原子DDL、UNDO空间回收等,在很多的网站,博客等上面都有大量的推广介绍。本文将要介绍的一个很有用的特性,资源组,反而没有得到充分的宣传。如果没有特别的说明,本文的例子针对的是Linux系统。

什么是资源组

大家知道,MySQL实例里面包含系统的后台线程,例如Master Thread、IO Thread, Purge Thread等,也有处理用户请求的前台线程,在MySQL 8.0之前,所有的线程都是同等优先级的,官方的版本是不可以修改线程的优先级的,也没法将线程绑定到特定的cpu核上。在某些业务场景下,我们希望可以来做干涉,例如,白天业务高峰的时候,让用户线程的优先级更高,而到晚上做批量处理的时候,让负责批量处理的线程优先级更高,等等,另外,也希望可以给特定的线程来绑定cpu核,来保证服务质量等…

使用MySQL 8.0资源组这个特性就可以很方便的满足这些需求,要做的就是通过CREATE RESORUCE GROUP命令创建一个资源组,在这个DDL语句里面指定这个的类型(USER 或者 SYSTEM类型),优先级 (-20..0 for SYSTEM 类型线程, 0..19 for USER类型线程,数字越小优先级越高),以及可以使用的VCPU(逻辑CPU)的编号。之后,再使用SET RESOURCE GROUP语句将thread指派到某个组里面即可。

注: 系统可用的VCPU编号可以通过cat cat /proc/cpuinfo命令查看,processor字段就是对应的VCPU的编号;在没有开启超线程的情况下,逻辑CPU个数 = 物理CPU个数 * CPU内核数。

资源组使用方法与示例

我们来看几个例子,

  • 创建一个叫sql_thread的资源组,将编号0和3的逻辑CPU指定到这个组,并将这个组的优先级设为最高 (THREAD_PRIORITY值越小,优先级越高,-20是最小的值)。
CREATE RESOURCE GROUP sql_thread
    TYPE = USER
    VCPU = 1,3
    THREAD_PRIORITY = -20
  • 将某个活动的MySQL Thread指派到sql_thread资源组中,Thread的id值需要查询Performance_Schema.threads的Thread_Id字段,目前Show Processlist命令的输出还不直接可以看到。
    SET RESOURCE GROUP sql_thread FOR 10
    
  • 修改资源组sql_thread绑定的逻辑CPU为编号5,6,并降低优先级到-5。
ALTER RESOURCE GROUP sql_thread VCPU = 5, 6 THREAD_PRIORITY = -5;

SYSTEM类型的Threads默认使用的是SYS_default资源组,USER类型的Threads默认使用的是USER_default资源组。看看这两种资源组的属性,没有绑定逻辑CPU,默认优先级都是0,见下面的输出 (例子环境下的逻辑CPU有24个,全部都可以使用)。

猜你喜欢

转载自my.oschina.net/u/3611008/blog/1817322