MYSQL8与TiDB资源管控功能对比
CPU资源分组管理
- 需要创建资源组,为每个资源组分配适当的CPU核心数量或者是vCPU (
cat /proc/cpuinfo
) - 将资源组分配给正在运行查询的线程ID
资源组:资源组包括名称,类型,分配的CPU核心,以及优先顺序。创建资源组时,使用SQL执行CREATE RESOURCE GROUP
:
create resource group RU1 type=user vcpu=2-3 thread_priority=5;
资源组的类型分为user和system,system的优先顺序要高于user,system的优先范围在-20到0之间,user的范围在0到19。
通过系统表INFORMATION_SCHEMA.RESOURCE_GROUPS
查看信息
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
+---------------------+---------------------+------------------------+--------------------+-----------------+
| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |
+---------------------+---------------------+------------------------+--------------------+-----------------+
| USR_default | USER | 1 | 0x302D39 | 0 |
| SYS_default | SYSTEM | 1 | 0x302D39 | 0 |
| RU1 | USER | 1 | 0x322D33 | 0 |
+---------------------+---------------------+------------------------+--------------------+-----------------+
在performance_schema.threads
表中查询thread_id,通过ID将线程绑定到资源组
SET RESOURCE GROUP RU1 FOR thread_id;
或者直接将会话绑定到资源组
SET RESOURCE GROUP RU1;
使用Hint直接将语句绑定到资源组
INSERT /*+ RESOURCE_GROUP(Batch) */ INTO t2 VALUES(2);
把系统的接口封装成 SQL 语句提供给用户,底层的实现通过系统 API 给线程直接绑定 CPU
与TiDB资源管控异同
- 使用资源组管理进行资源管理
- 使用SQL语句操作
- TiDB使用独特的RU对资源进行抽象,Mysql直接使用cpu核心编号
- TiDB使用令牌桶算法,Mysql使用操作系统的线程调度
- TiDB关注cpu+IO,可扩展,Mysql只能关注cpu,且难以扩展
- Mysql在系统级别操作cpu资源,更灵活,TiDB只在服务中提供