首页 > 编程笔记 > MySQL笔记 阅读:4

MySQL资源组的创建、修改和删除(附带实例)

MySQL 中有一个资源组功能,用于调控线程优先级以及绑定 CPU。MySQL 用户需要有 RESOURCE_GROUP_ADMIN 权限才能创建、修改、删除资源组。

注意,在 Linux 环境下,MySQL 进程需要有 CAP_SYS_NICE 权限才能使用资源组的完整功能:
[root@localhost~]# sudo setcap cap_sys_nice+ep /usr/local/mysql 9.0/bin/mysqld
[root@localhost~]# getcap /usr/local/mysql 9.0/bin/mysqld
/usr/local/mysql 9.0/bin/mysqld = cap_sys_nice+ep

MySQL 默认提供两个资源组,分别是 USR_default 和 SYS_default。下面来讲述资源组的常用操作。
1) 创建名称为“my_resouce_group”的资源组,SQL 语句如下:
mysql> CREATE RESOURCE GROUP my_resouce_group type=USER vcpu=0, 1
thread_priority=5;

2) 将当前线程加入资源组,SQL 语句如下:
mysql> SET RESOURCE GROUP my_resouce_group;

3) 查看资源组my_resouce_group中包含的线程,SQL 语句如下:
mysql> SELECT * FROM Performance_schema.threads WHERE RESOURCE_GROUP='my_resouce_group';
+-----------+---------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+----------------------------------------------------------------------------------+------------------+------+--------------+---------+-----------------+--------------+------------------+
| THREAD_ID | NAME                      | TYPE       | PROCESSLIST_ID |PROCESSLIST_USER | PROCESSLIST_HOST | PROCESSLIST_DB | PROCESSLIST_COMMAND | PROCESSLIST_TIME|PROCESSLIST_STATE | PROCESSLIST_INFO                    |PARENT_THREAD_ID | ROLE | INSTRUMENTED | HISTORY | CONNECTION_TYPE | THREAD_OS_ID |RESOURCE_GROUP   |
+-----------+---------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+----------------------------------------------------------------------------------+------------------+------+--------------+---------+-----------------+--------------+------------------+
|        48 | thread/sql/one_connection | FOREGROUND |            9 | root| localhost        | mysql          | Query        |                0 | Sending data| SELECT * FROM Performance_Schema.threads WHERE RESOURCE_GROUP='my_resouce_group' |NULL | NULL | YES          | YES     | SSL/TLS   |         1352 | my_resouce_group |
+-----------+---------------------------+------------+----------------+------------------+------------------+----------------+---------------------+------------------+-------------------+----------------------------------------------------------------------------------+------------------+------+--------------+---------+-----------------+--------------+------------------+

4) 资源组里有线程时,删除资源组会报错:
mysql> DROP RESOURCE GROUP my_resouce_group;
ERROR 3656 (HY000): Resource group test_resouce_group is busy.

5) 修改资源组的 SQL 语句如下:
mysql> ALTER RESOURCE GROUP my_resouce_group vcpu = 2,3 THREAD_PRIORITY = 8;
Query OK, 0 rows affected (0.10 sec)

6) 把资源组里的线程移出到默认资源组 USR_default 中,SQL 语句如下:
mysql> SET RESOURCE GROUP USR_default FOR 48;
Query OK, 0 rows affected (0.00 sec)

7) 删除资源组的 SQL 语句如下:
mysql> DROP RESOURCE group my_resouce_group;
Query OK, 0 rows affected (0.08 sec)

如果需要指定线程的 ID,可以使用以下语句:
SET RESOURCE GROUP my_resouce_group FOR thread_id;
这里的 thread_id 为线程的 ID。

8) 查询线程 ID 的方法如下:
SELECT thread_id FROM Performance_Schema.threads;
例如,将 ID 为 20 的线程加入资源组 my_resouce_group 中,SQL 语句如下:
SET RESOURCE GROUP test_resouce_group FOR 20;

相关文章