资源管理使用说明

更新时间:2024-12-13 09:32:05

PolarDB MySQL版新增资源控制(Resource control)功能,支持创建资源控制规则,以限制特定用户、数据库或连接ID所使用的资源。通过这一功能,您可以从用户、数据库或连接的角度限制CPU资源的使用,以防止突发流量对线上业务造成影响,并能够迅速对某些大查询进行资源限制。

注意事项

说明

如有资源隔离的需求,可联系工作人员后台开启参数。目前资源隔离仅在PolarDB MySQL版8.0.1企业版或PolarDB MySQL版 8.0.2企业版中支持。

您可以加入官方钉钉群进行咨询,获取更多技术支持。钉钉群号:59535005981。

  • 使用Resource control功能需开启Thread Pool功能。

  • 只读(RO)节点异步从读写(RW)节点同步资源控制信息,因此可能会出现延迟。

使用方式

连接PolarDB数据库集群后,通过高权限账户进行登录。

创建Resource Control

CREATE polar_resource_control {rc_name} max_cpu {max_cpu_value};

SQL语句详细描述如下所示:

参数名称

描述

参数名称

描述

{rc_name}

需要创建的资源控制(Resource Control)名称,最长长度为64个字符。

{max_cpu_value}

此资源控制所设置的最大CPU,其值表示占整个集群CPU的百分比,取值范围为[1,100]。

创建完成后,可以通过高权限账户执行以下SQL查询以获取所有资源控制(Resource Control)。

SELECT * FROM mysql.polar_resource_control;

可以通过高权限账户执行以下SQL查询,获取Resource Control下的Thread Group。

SELECT id, resource_control_name FROM information_schema.thread_pool_status;

修改Resource Control

ALTER polar_resource_control {rc_name} max_cpu {max_cpu_value};

SQL语句详细描述如下所示:

参数名称

描述

参数名称

描述

{rc_name}

需要修改的资源控制(Resource Control)名称,最长长度为64个字符。

{max_cpu_value}

此资源控制所修改的最大CPU,其值表示占整个集群CPU的百分比,取值范围为[1,100]。

修改Resource Control对应的最大CPU后,属于该Resource Control的Thread Group数量可能会发生变化。

删除Resource Control

DROP polar_resource_control {rc_name};

SQL语句详细描述如下所示:

参数名称

描述

参数名称

描述

{rc_name}

需要删除的资源控制(Resource Control)名称。

删除此Resource Control后,属于该Resource Control的Thread Group将会被释放掉,同时原先受该Resource Control CPU限制的用户、数据库或连接将不会再受到限制。

对用户或数据库设置Resource Control

绑定

SET polar_resource_control {rc_name} FOR database/USER {db_name/user_name};

SQL语句详细描述如下所示:

参数名称

描述

参数名称

描述

{rc_name}

需要绑定的资源控制(Resource Control)名称。

{db_name/user_name}

需要限制资源的数据库或用户。

执行上述SQL后,数据库或用户将受到相应Resource Control的CPU资源限制。正在执行的语句不会受到影响,只有在绑定后执行的语句才会生效。

解除绑定

RELEASE polar_resource_control {rc_name} FOR database/USER {db_name/user_name};

执行上述SQL后,数据库或用户将解除相应Resource Control的CPU资源限制。同样,正在执行的语句不会受到影响,只有在解除后执行的语句才会生效。

对Query或Connection设置Resource Control

绑定

SET polar_resource_control {rc_name} FOR query/connection {connection_id};

SQL语句详细描述如下所示:

参数名称

描述

参数名称

描述

{rc_name}

需要绑定的资源控制(Resource Control)名称。

{connection_id}

需要限制的Connection ID。

  • 当为Query设置Resource Control时,可以通过SHOW PROCESSLIST查看(Query)对应的Connection ID。当Query执行完成之后,将不再受到对应Resource control的资源限制。

  • 当Connection设置Resource Control时,当前Query执行结束,仍将受到相应Resource Control的资源限制,直到Connection结束并退出。

解除绑定

RELEASE polar_resource_control {rc_name} FOR query/connection {connection_id};

SQL语句详细描述如下所示:

参数名称

描述

参数名称

描述

{rc_name}

需要绑定的资源控制(Resource Control)名称。

{connection_id}

需要限制的Connection ID。

  • 当为Query解除Resource Control时,一旦Query执行完成,若无对应Resource Control,则将不会受到限制。

  • 当Connection解除Resource Control限制后,该连接将根据连接、用户或数据库进行相应的Resource Control限制。如果没有对应的Resource Control,则将不受到限制。

Resource Control生效顺序

对于一条query语句而言,是否受到Resource Control及具体受到哪个Resource Control的资源限制,按照以下顺序生效:

  1. 如果将query主动通过连接ID方式绑定至资源控制,优先级最高。

  2. 判断当前连接是否已经绑定至资源控制,若已绑定,则进行资源限制。

  3. 判断连接的用户是否已经绑定至资源控制,若已绑定,则进行资源限制。

  4. 判断当前连接的数据库是否已经绑定至资源控制,若已绑定,则进行资源限制。

  5. 如果以上都未满足,则不会受到资源限制。

多主集群使用方式

多主集群的使用方式与单主集群相同,语法完全兼容。在执行CREATEALTERDROP POLAR_RESOURCE_CONTROL时,将随机转发至集群中的读写节点,并在所有读写节点之间进行同步,这可能会有一些延迟。在对查询或连接进行资源限制时,可以通过HINT语法使用的方式来指定对某个节点进行设置。

最佳实践

应用场景

  • 防止恶意用户占用过多的集群资源。

  • 应对线上突发的慢查询。

  • Serverless集群中防止恶意用户引发集群的弹性扩展。

  • 在多用户环境或不同业务共享同一集群时,限制CPU的使用。

使用示例

  • 防止恶意用户占用过多的集群资源

    应对恶意用户,可提前设置其最多可使用CPU资源,或者可以在恶意用户出现后,设置其CPU资源。

    CREATE polar_resource_control rc_for_trouble_user max_cpu 10;
    SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;

    为用户trouble_user设置资源控制后,该用户线程最大可使用的CPU为整个集群的10%。这样可以有效防止恶意用户占用过多的CPU资源,从而避免对其他业务造成影响。

  • 应对线上突发慢查询

    线上有时会出现意外的慢查询,这可能是由于SQL解析或优化不当导致CPU负载增加,SQL查询长时间处于执行状态并消耗大量CPU。虽然可以通过kill命令终止这个查询,但需要等待查询执行到特定的临界点,这个过程会耗费一些时间。同时,在kill过程中事务的回滚也会消耗CPU资源并需要一定时间。为了快速降低因慢查询导致的CPU负载或避免CPU被完全占用,可以对该慢查询进行CPU使用限制。

    CREATE polar_resource_control rc_for_slow_query max_cpu 10;
    SET polar_resource_control rc_for_slow_query FOR query query_id;
    说明

    为慢查询query_id设置资源控制时,可以通过SHOW PROCESSLIST查看(Query)对应的query_id。

    为慢查询query_id设置资源控制后,该查询最大可使用的CPU限制为整个集群的10%。这样可以迅速降低集群的CPU负载,避免对线上其他业务造成影响。

    由于PolarDB集群中可能存在多个计算节点,且不同节点中可能会有相同的连接ID查询。因此,在为查询设置资源控制时,可以通过HINT语法使用的方式来指定对特定节点进行设置。

    /*force_node='pi-bpxxxxxxxx'*/ SET polar_resource_control rc_for_slow_query FOR query query_id;
  • Serverless集群防止恶意用户引发集群弹升

    当集群开启Serverless模式时,它会根据负载自动弹性扩展,以处理突发的高负载。然而,有时面对一些恶意用户时,我们可能不希望因其请求而导致集群扩展。在这种情况下,可以对这些恶意用户在Serverless集群上施加资源限制。

    CREATE polar_resource_control rc_for_trouble_user max_cpu 10;
    SET polar_resource_control rc_for_trouble_user FOR USER trouble_user;
  • 多租或不同业务使用同一集群,限制CPU使用

    在SaaS场景中,多个租户经常被放置在同一集群上进行处理,同时也有许多情况下不同业务共享同一集群。在这种情境下,我们希望限制单个租户或单个业务所能使用的资源,以防止某个用户或业务占用过多的CPU,从而影响整个集群的状态。为了应对这种情况,可以对各个业务分别设置CPU资源限制(例如,可以通过用户进行限制,数据库则可实现相同效果)。

    CREATE polar_resource_control rc_for_business_1 max_cpu 20;
    CREATE polar_resource_control rc_for_business_2 max_cpu 20;
    
    SET polar_resource_control rc_for_business_1 FOR USER user_1;
    SET polar_resource_control rc_for_business_2 FOR USER user_2;

    根据上述设置user_1user_2各自对应的不同业务可以分别设置为最多使用整个集群CPU的20%。因此,两个用户最多可共同使用40%的 CPU 资源。当user_1的业务负载突然增加时,其使用的CPU限制仍然保持在20%以内,这样就能够保证不影响集群上其他业务的CPU使用情况。

    若同一个业务使用了不同的user,那么可以将不同user设置为同一个Resource control。

    CREATE polar_resource_control rc_for_business_1 max_cpu 20;
    
    SET polar_resource_control rc_for_business_1 FOR USER user_1;
    SET polar_resource_control rc_for_business_1 FOR USER user_2;

    根据上述设置user_1user_2所对应的业务可以限制为最多使用整个集群CPU的20%。因此,两位用户总共最多只能共同使用20%的CPU 资源。这样,当某一用户的负载增加时,能够有效防止超出设定的CPU使用限制,确保资源的合理分配。

  • 本页导读 (1)
  • 注意事项
  • 使用方式
  • 创建Resource Control
  • 修改Resource Control
  • 删除Resource Control
  • 对用户或数据库设置Resource Control
  • 对Query或Connection设置Resource Control
  • Resource Control生效顺序
  • 多主集群使用方式
  • 最佳实践
  • 应用场景
  • 使用示例
AI助理

点击开启售前

在线咨询服务

阿里云 AI 助理已上线!

快来体验一下吧。