MySQL资源组的使用方法

news2024/9/22 1:28:48

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映射到下表所示的级别。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化与系统安全

信息安全是运维的根本,直接关系到企业的安危,稍有不慎会造成灾难性的后果。比如经年发生的多个知名网站会员数据库外泄事件,信息安全体系建设已经被提到了前所未有的高度。如何提升企业的安全防范水准是目前普遍面临的问题,主要有…

Flutter-实现悬浮分组列表

在本篇博客中,我们将介绍如何使用 Flutter 实现一个带有分组列表的应用程序。我们将通过 CustomScrollView 和 Sliver 组件来实现该功能。 需求 我们需要实现一个分组列表,分组包含固定的标题和若干个列表项。具体分组如下: 水果动物职业菜…

Java面试八股之MySQL主从复制机制简述

MySQL主从复制机制简述 MySQL的主从复制机制是一种数据复制方案,用于在多个服务器之间同步数据。此机制允许从一个服务器(主服务器)到一个或多个其他服务器(从服务器)进行数据的复制,从而增强数据冗余、提…

Spring cloud 中使用 OpenFeign:让 http 调用更优雅

注意:本文演示所使用的 Spring Cloud、Spring Cloud Alibaba 的版本分为为 2023.0.0 和 2023.0.1.0。不兼容的版本可能会导致配置不生效等问题。 1、什么是 OpenFeign Feign 是一个声明式的 Web service 客户端。 它使编写 Web service 客户端更加容易。只需使用 F…

maven-surefire-report-plugin插件生成测试报告

目录 官网 pom.xml配置 测试类 执行测试结果 修改测试类 pom文件更改配置maven-jxr-plugin xref xref-test ​Source Xref​ ​Test Source Xref​ 再此验证 有凭(有理)有据 官网 Maven Surefire Report Plugin – Showing Only Fail…

分享四种CAD图纸加密方法,防止盗图!

保护CAD图纸不受盗用和非法传播是设计行业中的一个重要课题,以下四种CAD图纸加密方法可以帮助防止图纸被未授权使用。 1.使用专业的加密软件(最安全的方法) 专门的加密软件,如安企神软件,可以提供更高级别的保护。它使…

EPICS数据库示例

本文目标是使用EPICS数据库示例帮助新手理解如何使用不同的示例。 1、使用seq和mbbo的简单选择器 这个简单示例展示了如何使用一个mbbo和一个seq来旋转哪个值将被设置到一个PV。 # 这个mbbo记录将选择将运行seq的哪段 record(mbbo, "CHOOSE") {field(VAL, "…

使用树莓派进行python开发,控制电机的参考资料

网站连接:https://www.cnblogs.com/kevenduan?page1 1、简洁的过程步骤, 2、有代码示例, 3、有注意事项,

AI实践与学习7_AI解场景Agent应用预研demo

前言 学习大模型Agent相关知识,使用llama_index实现python版的Agent demo,根据AI解题场景知识密集型任务特点,需要实现一个偏RAG的Agent WorkFlow,辅助AI解题。 使用Java结合Langchain4j支持的RAG流程一些优化点以及自定义图结构…

星网安全产品线成立 引领卫星互联网解决方案创新

2024年6月12日,盛邦安全(688651)成立星网安全产品线,这是公司宣布全面进入以场景化安全、网络空间地图和卫星互联网安全三大核心能力驱动的战略2.0时代业务落地的重要举措。 卫星互联网技术的快速发展,正将其塑造为全球…

MySQL 存储引擎事务

MySQL存储引擎&事务 一、MySQL 存储引擎1、怎么查看/添加“存储引擎”?2、常用存储引擎简介 二、MySQL 事务1、什么是事务?2、事务是怎么做到多条DML语句同时成功和同时失败的呢?3、事务四大特性 ACID4、四个隔离级别 一、MySQL 存储引擎…

如何下载jmeter旧版本

如何下载jmeter旧版本 推荐先用旧版本做好测试基本操作,因为高版本不适合做压力测试,需要证书,有点麻烦。 1.百度或直接打开jmeter官网:https://jmeter.apache.org/ 2.向下拖到Archives一栏,点击Apache Jmeter archi…

项目:简易Mybatis

目录 一、新建项目 二、新建模块 三、回顾JDBC 四、准备环境 五、使用dom4j解析xml文件 六、开始,编写Mapper解析API 1、自定义Resources类 2、定义Configuration类 3、定义MappedStatement类 4、定义XmlMapperBuilder类 5、更新一下UserMapper.xml和UserMapper接口 …

一文彻底带你搞懂什么是适配器模式!!

一文彻底带你搞懂什么是适配器模式!! 什么是适配器模式?适配器的两种实现方式适用情况代码示例背景类适配器对象适配器 IO流中的实际应用应用扩展 总结 什么是适配器模式? 适配器模式(Adapter Pattern)是作…

web自动化(六)unittest 四大组件实战(京东登录搜索加入购物车)

Unittest框架 Unittest框架:框架测试模块测试管理模块测试统计模块,python的内置模块 import unittest Unittest框架四大组件: 1、TestCase 测试用例 2.TestFixture 测试用例夹具 测试用例需要执行的前置和后置 3.TestSuite 测试套件 把需要执行的测试用例汇总在一…

什么是企业服务总线?它包含哪些技术组件?

我们每个人都会去医院,您描述下我们去医院的场景,然后引出这个挂号流程,通过挂号流程中的一个问题或者什么东西来吸引他的好奇心,这样呢?会比现在的预设场景好一些。我举个例子,人工智能怎么帮人看病。如果…

前端面试题23(css3)

关于CSS3的面试题,我们可以从多个维度来探讨,包括但不限于选择器、盒模型、布局技术、动画与过渡、响应式设计等。下面我会列举一些典型的CSS3面试问题,并尽可能提供详细的解答或示例代码。 1. CSS3中新增了哪些选择器? 答案: C…

【Java安装】windows10+JDK21+IDEA

文章目录 一、JDK安装1. 下载完成后按照自己需要的位置安装2. 配置环境变量2.1 JAVA_HOME变量2.2 PATH配置 3. 验证4. helloworld 二、IDEA安装三、IDEA-HelloWorld 一、JDK安装 JDK安装链接 1. 下载完成后按照自己需要的位置安装 2. 配置环境变量 2.1 JAVA_HOME变量 安装…

手机飞行模式是什么意思?3个方法教你如何开启

在现代生活中,手机已经成为我们日常生活中不可或缺的一部分。然而,有时我们需要暂时切断手机的通信功能,比如在飞机上、开会时或需要安静休息的时候。这时候,苹果手机上的“飞行模式”功能就派上了用场。 那么,手机飞…

【从零到一,如何搭建本地AI大模型】

摘要: 本文主要记录这一段时间对本地大模型搭建的心得。 作为一个资深程序员,在AI席卷全球的时候,深深感觉到了一丝危机感,不禁有一个想法不断在脑海闪现:我会不会真的哪一天被AI给取代了? 从哪入手 程序员出生的我,掌握了很多语言,从前端到数据库,再到运维,基本都…