MySQL资源组的使用方法

MySQL支持创建和管理资源组,并允许将服务器内运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性允许控制其资源,以启用或限制组中线程的资源消耗。DBA可以针对不同的工作负载适当地修改这些属性。

目前,CPU时间是一种可管理的资源,以“虚拟CPU”的概念表示,该概念包括CPU核心、超线程、硬件线程等。服务器在启动时确定有多少虚拟CPU可用,具有适当权限的数据库管理员可以将这些CPU与资源组相关联,并将线程分配给组。

例如,为了管理不需要以高优先级执行的批处理作业的执行,DBA可以创建一个批处理资源组,并根据服务器的繁忙程度调整其优先级。可以启用或禁用组来控制线程是否可分配给它们。

以下部分描述了MySQL中资源组使用的各个方面:

1 资源组元素

这些功能为MySQL中的资源组管理提供了SQL接口:

  • SQL语句允许创建、更改和删除资源组,并允许将线程分配给资源组。优化器提示允许将单个语句分配给资源组。
  • 资源组权限提供对哪些用户可以执行资源组操作的控制。
  • 信息架构RESOURCE_GROUPS表显示有关资源组定义的信息,性能架构线程表显示每个线程的资源组分配。
  • 状态变量提供每个管理SQL语句的执行计数。

2 资源组属性

资源组具有定义该组的属性。所有属性都可以在组创建时设置。某些属性在创建时是固定的;其他可以在此后的任何时间进行修改。

这些属性是在创建资源组时定义的,不能修改:

  • 每个组都有一个名称。资源组名称是类似于表和列名的标识符,除非它们包含特殊字符或是保留字,否则不需要在SQL语句中引用。组名不区分大小写,最长可达64个字符。
  • 每个组都有一个类型,即SYSTEM或USER。资源组类型影响可分配给该组的优先级值的范围,如后所述。该属性以及允许优先级的差异使系统线程能够被识别,从而保护它们免受用户线程对CPU资源的争用。

系统和用户线程对应于性能模式线程表中列出的后台和前台线程。

这些属性是在资源组创建时定义的,此后可以随时修改:

  • CPU相关性是资源组可以使用的一组虚拟CPU。亲和性可以是可用CPU的任何非空子集。如果一个组没有关联,它可以使用所有可用的CPU。
  • 线程优先级是分配给资源组的线程的执行优先级。优先级值的范围从-20(最高优先级)到19(最低优先级)。系统组和用户组的默认优先级均为0。

       允许系统组的优先级高于用户组,确保用户线程的优先级永远不会高于系统线程:

       (1)对于系统资源组,允许的优先级范围为-20到0。

       (2)对于用户资源组,允许的优先级范围为0到19。

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

3 资源组管理

默认情况下,有一个系统组和一个用户组,分别命名为SYS_default和USR_default。不能删除这些默认组,也不能修改它们的属性。每个默认组都没有CPU相关性,优先级为0。

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

对于用户定义的资源组,所有属性都在组创建时指定。创建组后,可以修改其属性,但名称和类型属性除外。

要创建和管理用户定义的资源组,请使用以下SQL语句:

  • CREATE RESOURCE GROUP创建一个新组。
  • ALTER RESOURCE GROUP修改现有组。
  • DROP RESOURCE GROUP删除现有组。

这些语句需要RESOURCE_GROUP_ADMIN权限。

要管理资源组分配,请使用以下功能:

  • SET RESOURCE GROUP将线程分配给一个组。
  • RESOURCE_GROUP优化器提示将单个语句分配给一个组。

这些操作需要RESOURCE_GROUP_ADMIN或RESOURCE-GROUP_USER权限。

资源组定义存储在Resource_groups数据字典表中,以便组在服务器重新启动时保持不变。因为resource_groups是数据字典的一部分,所以用户无法直接访问它。使用信息模式Resource_GROUPS表可以获得资源组信息,该表被实现为数据字典表上的视图。

最初,RESOURCE_GROUPS表中有以下行描述默认组:

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

THREAD_PRIORITY值为0,表示默认优先级。VCPU_IDS值显示了包括所有可用CPU的范围。对于默认组,显示的值因MySQL服务器运行的系统而异。

前面的讨论提到了一个场景,该场景涉及一个名为Batch的资源组来管理不需要高优先级执行的批处理作业的执行。要创建这样一个组,请使用类似以下的语句:

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

要验证资源组是否按预期创建,请检查resource_GROUPS表:

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

如果THREAD_PRIORITY值为0而不是10,请检查您的平台或系统配置是否限制了资源组功能;请参阅资源组限制。

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

SET RESOURCE GROUP Batch FOR thread_id;

此后,命名线程中的语句将使用批处理组资源执行。

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

SET RESOURCE GROUP 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;

4 资源组复制

资源组管理是发生该管理的服务器的本地管理。资源组SQL语句和对Resource_groups数据字典表的修改不会写入二进制日志,也不会被复制。

5 资源组限制

在某些平台或MySQL服务器配置上,资源组不可用或有限制:

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

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

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

mysql> ALTER RESOURCE GROUP abc THREAD_PRIORITY = 10;
Query OK, 0 rows affected, 1 warning (0.18 sec)

mysql> SHOW WARNINGS;
+---------+------+-------------------------------------------------------------+
| Level   | Code | Message                                                     |
+---------+------+-------------------------------------------------------------+
| Warning | 4560 | Attribute thread_priority is ignored (using default value). |
+---------+------+-------------------------------------------------------------+
  • 在Linux上,除非设置了CAP_SYS_NICE功能,否则资源组线程优先级将被忽略。向进程授予CAP_SYS_NICE功能将启用一系列特权;咨询http://man7.org/linux/man-pages/man7/capabilities.7.html查看完整列表。启用此功能时请小心。

在使用systemd和内核支持Ambient Capabilities(Linux 4.3或更新版本)的Linux平台上,建议启用CAP_SYS_NICE功能的方法是修改MySQL服务文件并保持mysqld二进制文件不变。要调整MySQL的服务文件,请使用以下过程:

(1)为您的平台运行适当的命令:

      a, Oracle Linux、Red Hat和Fedora系统:

$> sudo systemctl edit mysqld

     b. SUSE、Ubuntu和Debian系统:

$> sudo systemctl edit mysql

(2)使用编辑器,将以下文本添加到服务文件中:

[Service]
AmbientCapabilities=CAP_SYS_NICE

(3)重新启动MySQL服务

如果不能像刚才描述的那样启用CAP_SYS_NICE功能,可以使用setcap命令手动设置它,指定mysqld可执行文件的路径名(这需要sudo访问权限)。您可以使用getcap检查功能。例如:

$> sudo setcap cap_sys_nice+ep /path/to/mysqld
$> getcap /path/to/mysqld
/path/to/mysqld = cap_sys_nice+ep

作为一项安全措施,将mysqld二进制文件的执行限制为root用户和具有mysql组成员身份的用户:

$> sudo chown root:mysql /path/to/mysqld
$> sudo chmod 0750 /path/to/mysqld

如果需要手动使用setcap,则必须在每次重新安装后进行。

  • 在Windows上,线程以五个线程优先级之一运行。资源组线程优先级范围-20到19映射到下表所示的级别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/784734.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

田地行走-美团2023笔试(codefun2000)

题目链接 田地行走-美团2023笔试(codefun2000) 题目内容 塔子哥是一个农民,他有一片 nm 大小的田地,共 n 行 m 列,其中行和列都用从 1 开始的整数编号,田地中有 k 个格子中埋有土豆。我们记第 a 行第 b 列的格子为 (a,b) 。塔子哥…

LM2596/LM2596S多路降压稳压DC-DC开关电源芯片详解(第二部分:电路设计)(12V转5V、12V转3.3V、任意电压转任意电压)

目录 一、固定电压(3.3/5/12V)模块设计实例 1.设计条件:VOUT5V,VIN(MAX)12V,ILOAD(MAX)3A 2.设计步骤: (1)电感的选择(L1) (2)输…

C++入门基础

前言 本篇博客讲解一下c得入门基础 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee:普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大家点赞&…

掌握计算机网络基础:从零开始的指南

计算机网络是现代信息社会的重要基石。本文将以简洁明了的方式为基础小白介绍计算机网络的基本概念、分类、以及其在信息时代中的重要作用。 计算机网络在信息时代中的作用 21世纪是以数字化、网络化、信息化为重要特征的信息时代。 计算机网络作为信息的最大载体和传输媒介&…

微信自动加好友工具

批量导入数据到后台,可设置添加速度、间隔时间、验证信息和自动备注等,任务执行时间,后台会自动执行操作。

ubuntu 分区情况

ubuntu系统安装与分区指南 - Philbert - 博客园 (cnblogs.com)https://www.cnblogs.com/liangxuran/p/14872811.html 详解安装Ubuntu Linux系统时硬盘分区最合理的方法-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1711884

基于flask的猫狗图像预测案例

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

uni-app 封装http请求

1.引言 前面一篇文章写了使用Pinia进行全局状态管理。 这篇文章主要介绍一下封装http请求,发送数据请求到服务端进行数据的获取。 感谢: 1.yudao-mall-uniapp: 芋道商城,基于 Vue Uniapp 实现,支持分销、拼团、砍价、秒杀、优…

2024年6月总结 | 软件开发技术月度回顾(第一期)

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ Hello,大家好啊!随着欧洲杯和奥运会的临近,2024 年下半年的序幕也随之拉开。回顾 2024 年上半年的技术圈,我们看到了一系列令人振奋的进展…

ELfK logstash filter模块常用的插件 和ELFK部署

ELK之filter模块常用插件 logstash filter模块常用的插件&#xff1a; filter&#xff1a;表示数据处理层&#xff0c;包括对数据进行格式化处理、数据类型转换、数据过滤等&#xff0c;支持正则表达式 grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名…

51单片机嵌入式开发:5、按键、矩阵按键操作及protues仿真

按键、矩阵按键操作及protues仿真 1 按键介绍1.1 按键种类1.2 按键应用场景 2 按键电路3 按键软件设计3.1 按键实现3.2 按键滤波方法3.3 矩阵按键软件设计3.4 按键Protues 仿真 4 按键操作总结 提示 1 按键介绍 1.1 按键种类 按键是一种用于控制电子设备或电路连接和断开的按…

LLM之RAG实战(四十一)| 使用LLamaIndex和Gemini构建高级搜索引擎

Retriever 是 RAG&#xff08;Retrieval Augmented Generation&#xff09;管道中最重要的部分。在本文中&#xff0c;我们将使用 LlamaIndex 实现一个结合关键字和向量搜索检索器的自定义检索器&#xff0c;并且使用 Gemini大模型来进行多个文档聊天。 通过本文&#xff0c;我…

Face_recognition实现人脸识别

这里写自定义目录标题 欢迎使用Markdown编辑器一、安装人脸识别库face_recognition1.1 安装cmake1.2 安装dlib库1.3 安装face_recognition 二、3个常用的人脸识别案例2.1 识别并绘制人脸框2.2 提取并绘制人脸关键点2.3 人脸匹配及标注 欢迎使用Markdown编辑器 本文基于face_re…

Python 安装Numpy 出现异常信息

文章目录 前言一、包源二、安装完成异常 前言 安装Python Numpy包出现异常问题 Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. 一、包源 使用默认的包源出现超时异常&#xff0c;改用清华包源 pip …

娱乐圈幕后揭秘孙俪天选打工人

【娱乐圈幕后揭秘&#xff1a;孙俪“天选打工人”背后的热议风暴】在聚光灯下光鲜亮丽的娱乐圈&#xff0c;每一位明星的日常备受瞩目。近日&#xff0c;实力派演员孙俪在社交媒体上分享了一段片场棚拍的趣事&#xff0c;本是无心之举&#xff0c;意外引爆了网络热议的导火索。…

这几类人,千万不要买纯电车

文 | AUTO芯球 作者 | 响铃 纯电车的冤大头真是太多了&#xff0c; 我之前劝过&#xff0c;有些人不适合买纯电车&#xff0c; 你们看&#xff0c;果然吧&#xff0c;麦卡锡最近的一份报告就披露了 去年啊&#xff0c;22%的人在买了电车后后悔了&#xff0c; 这些人说了&a…

面试常考题---128陷阱(详细)

1.问题引入 分别引入了int和Integer变量&#xff0c;并进行比较 int b 128; int b1 128;Integer d 127; Integer d1 127;Integer e 128; Integer e1 128;System.out.println(bb1); System.out.println(dd1); System.out.println(ee1); System.out.println(e.equals(e1)…

kafka系列之offset超强总结及消费后不提交offset情况的分析总结

概述 每当我们调用Kafka的poll()方法或者使用Spring的KafkaListener(其实底层也是poll()方法)注解消费Kafka消息时&#xff0c;它都会返回之前被写入Kafka的记录&#xff0c;即我们组中的消费者还没有读过的记录。 这意味着我们有一种方法可以跟踪该组消费者读取过的记录。 如前…

【力扣高频题】014.最长公共前缀

经常刷算法题的小伙伴对于 “最长”&#xff0c;“公共” 两个词一定不陌生。与此相关的算法题目实在是太多了 &#xff01;&#xff01;&#xff01; 之前的 「动态规划」 专题系列文章中就曾讲解过两道相关的题目&#xff1a;最长公共子序列 和 最长回文子序列 。 关注公众…

跨境电商代购系统与电商平台API结合的化学反应

随着全球化的不断推进和互联网技术的飞速发展&#xff0c;跨境电商已成为国际贸易的重要组成部分。跨境电商代购系统作为连接国内外消费者与商品的桥梁&#xff0c;不仅为消费者提供了更多元化的购物选择&#xff0c;也为商家开辟了更广阔的市场空间。在这一过程中&#xff0c;…