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

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

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

相关文章

前端开发攻略---webSocket的简单实现与使用

1、演示 2、实现流程 安装依赖 npm i ws 服务端代码 const WebSocket require(ws)// 创建一个 WebSocket 服务器,监听端口 3000 const wss new WebSocket.Server({ port: 3000 })// 监听连接事件 wss.on(connection, function connection(ws) {console.log(客户端…

HTML(29)——立体呈现

作用:设置元素的子元素是位于3D空间中还是平面中 属性名:transform-style 属性值: flat:子级处于平面中preserve-3d:子级处于3D空间 步骤: 父级元素添加 transform-style:preserve-3d 子级定位调整子盒子的位置&a…

【GC 垃圾回收算法和回收器】

作者:ofLJli 链接:https://juejin.cn/post/7003213289425633287?searchId20240709085629749958B21D886D4E67D4 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 概述 在JVM中主要的结构为&…

怎样优化 PostgreSQL 中对 XML 数据的存储和查询?

文章目录 一、数据类型选择二、索引优化三、查询优化四、分区策略五、存储参数调整六、示例代码与解释七、性能测试与监控八、数据清理与压缩九、注意事项 在 PostgreSQL 中处理 XML 数据时,为了实现高效的存储和查询,需要采取一系列的优化策略。以下将详…

【Linux进阶】文件系统3——目录树,挂载

前言 在Windows 系统重新安装之前,你可能会事先考虑,到底系统盘C盘要有多大容量?而数据盘D盘又要给多大容量等,然后实际安装的时候,你会发现其实C盘之前会有个100MB的分区被独立出来,所以实际上你就会有三个…

探索横河AQ6370E系列光谱仪隐藏功能!---高级标记功能!

横河AQ6370E系列光谱仪的这款光谱仪的传统功能中,其实还隐藏了一个特别实用的功能——高级标记功能!前所未有的方式解析数据与测量信号,不仅带来了全新的测试体验,还提升了测量速度,那么这个功能怎么找到呢&#xff0c…

ALG:MODTRAN查找表参数详解(学习笔记4)

一、Modtran安装及环境配置 https://blog.csdn.net/qq_41358707/article/details/134721973 二、ALG配置更新 添加大气RTM。Settings,进入首选项界面,单击RTM选项卡以更新RTM的配置: 从窗口右上角的select RTM弹出菜单中选择一个大气RTM&a…

【数据结构】TreeMap及TreeSet

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 一、概念 TreeMap和TreeSet都是Java中基于红黑树(Red-Black tree)实现的有序集合类。它们分别实现了SortedMap和SortedSet接口,因此提供了按照键(对…

更深入了解汽车与航空电子等安全关键型应用的IP核考量因素

作者:Philipp Jacobsohn,SmartDV高级应用工程师 中国已经连续十多年成为全球第一大汽车产销国,智能化也成为了汽车行业发展的一个重要方向,同时越来越多的制造商正在考虑进入无人机和飞行汽车等低空设备,而所有的这些…

ExcelVBA运用Excel的【条件格式】(三)

ExcelVBA运用Excel的【条件格式】(三)前面知识点回顾1. 访问 FormatConditions 集合 Range.FormatConditions2. 添加条件格式 FormatConditions.Add 方法语法表达式。添加 (类型、 运算符、 Expression1、 Expression2)其中 TextOperator:***&am…

“创新电商营销:‘精选返现‘模式引领购物新风尚“

在电子商务领域的蓬勃发展中,创新营销模式层出不穷,其中“精选返现”模式凭借其创新的互动机制与激励机制,赢得了广大消费者的青睐。该模式通过优化价格策略、融入社交互动及构建梯度回馈体系,有效激发了消费者的购买动力&#xf…

企业应对策略:全面防御.DevicData-P-xxxxxx勒索病毒

引言 在数字化时代,网络安全已成为不可忽视的重要议题。随着互联网的普及,各种网络威胁层出不穷,其中勒索病毒以其独特的攻击方式和巨大的破坏性,给个人用户和企业带来了严重的经济损失和数据安全风险。在众多勒索病毒中&#xff…

昇思25天学习打卡营第11天|基于MindSpore的GPT2文本摘要

数据集 准备nlpcc2017摘要数据,内容为新闻正文及其摘要,总计50000个样本。 数据需要预处理,如下 原始数据格式: article: [CLS] article_context [SEP] summary: [CLS] summary_context [SEP] 预处理后的数据格式: […

Redis安装部署与使用,多实例

一、redis基础 1.1 关系型数据库和NoSQL数据库 数据库主要分为两大类:关系型数据库与 NoSQL 数据库。 关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据。主流的 MySQL、Oracle、MS SQ…

Python爬虫教程第2篇-reqeusts是最好用的网络请求工具

简介 爬虫第一步就是网络请求,一个好用的网络请求库会非常重要。而requests库就是非常好用的一个http库,pyhon中虽然也有内置的urllib库用于网络请求,但是urllib使用起来比较的麻烦,而且缺少很多实用的高级功能,所以这…

Syncthing一款开源去中心化和点对点文件同步工具

Syncthing:一款开源的文件同步工具,去中心化和点对点加密传输,支持多平台,允许用户在多个设备之间安全、灵活地同步和共享文件,无需依赖第三方云服务,特别适合高安全性和自主控制的文件同步场景。 &#x…

使用MySQLInstaller配置MySQL

操作步骤 1.配置High Availability 默认选项Standalone MySQL Server classic MySQL Replication 2.配置Type and Networking ◆端口默认启用TCP/P网络 ◆端口默认为3306 3.配置Account and Roles 设置root账户的密码、添加其他管理员 4.配置Windows Service ◆配置MySQL Serv…

Java线程池及面试题

1.线程池介绍 顾名思义,线程池就是管理一系列线程的资源池,其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。 总结一下使用线程池的好处: 降低资源消耗。通过重复利用已创建的…

xcode项目添加README.md文件并进行编辑

想要给xcode项目添加README.md文件其实还是比较简单的,但是对于不熟悉xcode这个工具的人来讲,还是有些陌生,下面简单给大家讲一下流程。 选择“文件”>“新建”>“文件”,在其他(滚动到工作表底部)下…

Java基础-组件及事件处理(中)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 BorderLayout布局管理器 说明: 示例: FlowLayout布局管理器 说明: …