MySQL 8.0 RESOURCE_GROUP在这篇文章中,我们将提供新的MySQL 8.0 RESOURCE_GROUP特性的概述。

在MySQL 8.0中引入的一个伟大的新特性——在我看来——需要注意的RESOURCE_GROUP

短的免责声明:我想指出,MySQL 8.0尚未GA,所以有可能MySQL 8.0RESOURCE_GROUP实现的变化特性和/或行为。

我使用了MySQL社区服务器8.0 RC,下面提到的一切适用于这个MySQL版本。

在这篇文章中,我将很快看这个特性和总结它是什么,它如何使DBA的日子好过一点,突出一些已知的限制。

MySQL文档描述如下:

“MySQL支持资源组的创建和管理,和许可分配线程运行在服务器特定的组,这样线程执行根据可用的资源。组属性使控制其资源,启用或限制资源消耗的线程组。dba可以修改这些属性,适合不同的工作负载。

“目前,CPU时间是可管理的资源,为代表的概念“虚拟CPU”作为一个术语,包括CPU核,核,硬件线程,等等。服务器在启动时决定多少虚拟cpu,以适当的权限和数据库管理员可以将这些cpu资源组和分配线程组。”

太好了,现在我们可以给个vCPU资源分配不同的群体和不同的侧重点。在继续之前发现资源组是什么以及它们是如何酷,让我们快速浏览一下限制:

  • 资源组插件不可用,如果你安装线程池
  • macOS资源组不可用,没有提供的API将cpu绑定到线程
  • FreeBSD和Solaris资源组线程优先级被忽略(有效,所有线程运行优先级0)
  • 在Linux上,资源组线程优先级被忽略,除非CAP_SYS_NICE能力集。MySQL包安装Linux系统应该设置这个功能。安装使用压缩焦油从源文件二进制发行版或,CAP_SYS_NICE功能可以设置手动使用setcap命令,指定的路径名mysqld可执行(这需要sudo访问)。
  • 在Windows中,线程运行在5个线程优先级水平。-20年至19的资源组线程优先级范围映射到这些水平。
  • 资源组管理是本地服务器它发生。资源组SQL语句和修改resource_group数据字典表不写入二进制日志,不是复制。

因为我们现在知道的限制,让我们看看如何使用它对现实世界的场景。

从我的经验,许多DBA的缓慢的问题报告和/或聚合查询的相同实例密集型OLTP工作负载时,正在执行一些批处理作业。最简单的,通常的解决这个问题的方法是将这些活动一个奴隶实例。虽然这个工作,需要一些时间提供新的硬件资源,设置它,等。所以在大多数情况下,这种方法可以考虑中期。

如果你需要修复现有的服务器上的资源争用问题,和卸载以后这样的活动吗?或者你不能移动所需的批处理作业的奴隶,因为它的一致性,你负担不起奴隶滞后吗?批处理作业或在某些情况下,可能需要执行一个写所以无法去奴隶吗?

在这种情况下,资源组是一个很好的修复。

目前我们有两个默认组,我们不能删除或修改:

每组有一个类型,它是系统用户。资源组类型影响的范围优先级值分配。这个属性,允许不同的优先级,使系统线程能够被识别,以保护他们免受竞争对用户线程的CPU资源。

下面的列表显示了优先级范围,每一组相关类型:

    • 对于系统资源组,允许优先级范围是-20到0。
    • 对于用户资源组,允许优先级范围是0到19。线程的优先级线程的执行优先级分配给资源组。优先级值的范围从-20(最高优先级)至19日(最低优先级)。默认优先级为0,对系统和用户组。系统组比用户组被允许一个更高的优先级,确保用户线程没有优先级高于系统线程:

假设我们有8个CPU(这是我的情况下)。

现在让我们为我们的报告查询,创建一个资源组和另一组批作业:

让我们验证组是否被正确地创建:

现在让我们考虑几个场景:

  • 我们已经有了巨大的报告查询服务器上运行,它会消耗大量的资源,使一切变慢。在这种情况下,我们可以做以下几点:
    • 发现这个报告查询的thread_id性能模式线程thread_id并分配一个特定的资源组:

  • 执行一个语句使用报告组,使用RESOURCE_GROUP优化器提示:

线程分配给报告组执行的资源,你可以根据需要修改。

例如,与此同时,我们执行一个批处理作业脚本与Batch_job集团资源。作为一个结果,我们需要减少优先级和更少的CPU资源分配给我们的报道资源组。我们可以用以下方式:

结论

MySQL 8.0RESOURCE_GROUP是一个伟大的和易于使用的功能,在某些情况下可以帮助很多。我有一个强烈的感觉,可管理资源的列表不会只局限于CPU的,还将扩展到其他方面的服务器。一旦它的生产准备,我认为许多数据库管理员会发现它非常有用的和有用的。

下一步,我将运行的测试资源利用率不同的资源组的使用场景和性能结果。