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_defaultRESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1VCPU_IDS: 0-3THREAD_PRIORITY: 0
*************************** 2. row ***************************RESOURCE_GROUP_NAME: SYS_defaultRESOURCE_GROUP_TYPE: SYSTEM
RESOURCE_GROUP_ENABLED: 1VCPU_IDS: 0-3THREAD_PRIORITY: 0
THREAD_PRIORITY值为0,表示默认优先级。VCPU_IDS值显示了包括所有可用CPU的范围。对于默认组,显示的值因MySQL服务器运行的系统而异。
前面的讨论提到了一个场景,该场景涉及一个名为Batch的资源组来管理不需要高优先级执行的批处理作业的执行。要创建这样一个组,请使用类似以下的语句:
CREATE RESOURCE GROUP BatchTYPE = USERVCPU = 2-3 -- assumes a system with at least 4 CPUsTHREAD_PRIORITY = 10;
要验证资源组是否按预期创建,请检查resource_GROUPS表:
mysql> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPSWHERE RESOURCE_GROUP_NAME = 'Batch'\G
*************************** 1. row ***************************RESOURCE_GROUP_NAME: BatchRESOURCE_GROUP_TYPE: USER
RESOURCE_GROUP_ENABLED: 1VCPU_IDS: 2-3THREAD_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 BatchVCPU = 3THREAD_PRIORITY = 19;
- 在系统负载较轻的情况下,增加分配给组的CPU数量,提高其优先级,或(如图所示)两者兼有:
ALTER RESOURCE GROUP BatchVCPU = 0-3THREAD_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映射到下表所示的级别。

相关文章:
MySQL资源组的使用方法
MySQL支持创建和管理资源组,并允许将服务器内运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性允许控制其资源,以启用或限制组中线程的资源消耗。DBA可以针对不同的工作负载适当地修改这些属性。 目前,CPU时间是一…...
python--实验7 函数(1)
知识点 函数的定义与调用 函数分类:内置函数和自定义函数。函数定义:使用def关键字定义函数,包括函数名、参数列表和函数体。注意: (1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号…...
【力扣】数组中的第K个最大元素
一、题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…...
WTM的项目中EFCore如何适配人大金仓数据库
一、WTM是什么 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。2017年9月,将代码移植到了.Net Core上&…...
互联网3.0时代的变革者:华贝甄选大模型创新之道
在当今竞争激烈的商业世界中,华贝甄选犹如一颗璀璨的明星,闪耀着独特的光芒。 华贝甄选始终将技术创新与研发视为发展的核心驱动力。拥有先进的研发团队和一流设施,积极探索人工智能、大数据、区块链等前沿技术,为用户提供高性能…...
Tomcat的安全配置
1、生产环境优化 2、部分漏洞修复 转载自风险评估:Tomcat的安全配置,Tomcat安全基线检查加固-CSDN博客...
[笔记] 卷积 - 01 变速箱需要放置多少个加速度传感器?
1.讨论范围 本帖主要对卷积运算的过程和物理意义进行基本的展开,不涉及具体的验算过程。 最终所要达成的目标是,能够自然地判断某种物理现象或者某个测量目标是否与卷积运算有关,以及如何进行测量,搜集数据,调用三方…...
Maya崩溃闪退常见原因及解决方案
Autodesk Maya 是一款功能强大的 3D 计算机图形程序,被电影、游戏和建筑等各个领域的设计师广泛使用。然而,Maya 就像任何其他软件一样可能会发生崩溃问题。在前文中,小编给大家介绍了3ds Max使用V-Ray渲染时的崩溃闪退解决方案: …...
编码与梦想:我的CSDN创作5周年
五年前的今天,我带着对技术的热爱和对知识的渴望,踏上了CSDN的创作之旅。这个平台对于我来说,不仅仅是一个分享和学习的场所,更是我成长和自我实现的见证。 机缘 记得那时,我正为了一个编程难题而苦恼,偶…...
Vue2 基础十Vuex
代码下载 Vuex 概述 组件之间共享数据的方式: 父组件向子组件传值,是以属性的形式绑定值到子组件(v-bind),然后子组件用属性props接收。子组件向父组件传值,子组件用 $emit() 自定义事件,父组…...
【大模型】驾驭未知领域:LLM如何处理域外或无意义的提示
驾驭未知领域:LLM如何处理域外或无意义的提示 引言一、概念解析1.1 域外提示1.2 无意义提示二、LLM处理策略2.1 上下文推断2.2 缺省回答2.3 模糊处理2.4 求助于常识三、实例对比3.1 域外提示实例3.2 无意义提示实例四、挑战与局限五、未来展望六、结语附录:术语解释与参考资料…...
Docker容器 为MySQL创建新用户和授权
当您需要为 MySQL 数据库创建一个新用户并配置其访问权限时,可以按照以下步骤操作。我将创建一个名为 newuser 的新用户,并为其授予在任何主机上访问所有数据库的权限。 创建新用户和授权步骤: 登录到 MySQL 服务器 首先,使用具有…...
openssh9.8p1更新 修复漏洞(CVE-2024-6387)
2024 年 7 月,互联网公开披露了一个 OpenSSH 的远程代码执行漏洞(CVE-2024-6387)。鉴于该漏洞虽然利用较为困难但危害较大,建议所有使用受影响的企业尽快修复该漏洞。 centos7 为例 yum -y install gcc make openssl-devel zlib…...
超市收银系统源码
今天给大家分享一套线上线下打通的收银系统,安卓/win双端线下收银台,可DIY、多模板的三端线上小程序商城,除此之外ERP进销存管理、商品管理、会员营销都很完善。 重点是系统支持OEM贴牌独立部署和全开源源码,非常适合一些正在寻找…...
word 使用手册
word 文档中如何将下行的指定文字退格到上行中 就像是这样的 编号:111 密码:222 编号:123 密码:321 编号:124 密码:331 变成 编号:111密码:222 编号:123密码࿱…...
vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素
7、指令修饰符 (1)概念: 通过“.”指明一些指令后缀,不同后缀封装了不同的处理操作->简化代码 (2)按键修饰符 keyup.enter->键盘回车监听 (3)v-model修饰符 v-model.tri…...
JRE、JVM、JDK分别是什么。
JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包,它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器(javac)、Java 运行时环境&…...
台灯护眼是真的吗?台灯怎么选对眼睛好?一文带你读懂!
近视问题,这一现代社会的“视力杀手”,正悄然影响着越来越多的人群,尤其是青少年群体。长时间面对电子屏幕和书本,加上不正确的用眼习惯,使得视力下降成为普遍现象。在此背景下,一款优质的护眼台灯显得尤为…...
【学术会议征稿】第五届计算机工程与智能控制学术会议(ICCEIC 2024)
第五届计算机工程与智能控制学术会议(ICCEIC 2024) 2024 5th International Conference on Computer Engineering and Intelligent Control 第五届计算机工程与智能控制学术会议(ICCEIC 2024)将于2024年10月18日至22日在广州举办࿰…...
【Golang】slice切片
slice Go语言的切片是对数组的抽象。 数组的使用 package mainimport ("fmt" )// 传递固定长度的数组还是值传递的方式 func printArray(myArray [5]int) {for index, value : range myArray {fmt.Println("index:", index, "value:", value)…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
