暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A CPU优先级

墨天轮 2019-10-12
1076

CPU优先级

背景信息

通过负载管理(队列控制)设置了全局和局部并发控制之后,当执行的并发任务数超过该设置的并发数之后,新的任务会进入到等待队列中。队列按照先进先出的原则排队执行。

资源负载管理开启模式下等待队列的机制如图1所示:

图1 负载管理等待队列的机制
表1 负载管理等待队列的调度机制

并发受限制类型

调度执行机制

对于受全局并发数限制的任务

  • 当部署有LVS时,各用户执行的作业任务通过LVS分发至各CN队列。用户也可以直接连接至CN实例执行任务,即用户任务可以直接进入连接的CN队列。
  • 在任意CN上,任务按照先进先出的原则,进入该CN的等待队列,先进入到该队列的任务会优先被调度至对应的资源池执行。

对于受局部并发数限制的任务

  • 任务的队列由执行该任务的用户所绑定的资源池决定的,如果该用户没有绑定资源池,则任务进入默认资源池default_pool的等待队列。
  • 资源池队列中的任务按照先进先出的原则被执行。当资源池中的空闲资源满足资源池队列中最下端任务的需求时,则该任务进入资源池中开始执行。
说明:

对于受全局并发数量限制的任务,在CN等待队列中,静态并发控制情况下,任务进入资源池的顺序由执行该任务的用户所绑定的资源池的优先级决定;动态负载管理情况下,任务进入资源池的顺序按照先进先出原则。值得注意的是,在动态负载管理情况下,中心协调节点(CCN)上等待的队列,任务进入资源池的顺序由执行该任务的用户所绑定的资源池的优先级决定。

前提条件

  • 已参考8了解控制组的分类以及控制方式。
  • 已熟悉gs_cgroup和gs_ssh的使用。

操作步骤

  • 以操作系统用户omm登录GaussDB 200集群任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  • 调资源池的优先级。调整资源池绑定的控制组“class_a”的资源比例占Class总资源的10%。

    gs_ssh -c "gs_cgroup -u -S class_a -s 10"
    说明:

    调整资源池的优先级可以通过调整资源池绑定的控制组资源比例来实现。当资源池绑定的控制组的资源比例发生变化,则其对应的优先级也会同步变化。

  • 调整当前用户的优先级。

    • 使用gsql连接数据库。
    • 调整用户“tenant_a1”绑定的资源池为“resource_pool_b1”。
      1
      ALTER USER tenant_a1 WITH RESOURCE POOL 'resource_pool_b1';
      
      说明:
      • 调整用户的优先级可以通过调整用户绑定的资源池来实现。
      • 调整用户优先级需要有sysadmin权限。
      • 对于后台线程以及线程复用执行的新作业,该值的改动不会生效。如果希望这类线程即时识别参数变化,可以使用kill session或重启节点的方式来实现。

  • 通过设置当前会话关联的控制组为“class_a:workload_a2”或资源池为“resource_pool_a2”,调整会话的优先级。

    1
    postgres=# set cgroup_name="class_a:workload_a2";
    

    1
    set session_respool="resource_pool_a2";
    
    说明:

    调整当前会话的优先级可以通过调整当前会话关联的控制组或资源池来实现。

  • 调整任务在队列中的位置。

    • 查询CN队列中的阻塞任务,获取需要调整的阻塞任务的threadid。
      1
      SELECT * FROM pg_session_wlmstat where status = 'pending';
      
    • 调整任务在CN队列中的位置,将该任务调整到CN队列的最前端。
      1
      SELECT pg_wlm_jump_queue(threadid);
      
    • 作业执行中,把作业的优先级调整到class_a:workload_a2。通过视图pg_session_wlmstat查询到作业的threadid。
      1
      SELECT gs_wlm_switch_cgroup(threadid, 'class_a:workload_a2');
      
    说明:

    如果语句优先级较低或者长时间被阻塞需要尽快执行,可以使用插队操作,只有管理员才有权限对正在执行的任务调整优先级。

查看CPU优先级的配置信息

  • 查看控制组的资源占比
    gs_cgroup -p
    Class Group information is listed: GID: 20 Type: CLASS Name: DefaultClass TopGID: 3 Percent(%): 124(20) MaxLevel: 1 RemPCT: 100 Cores: 0-3 GID: 21 Type: CLASS Name: class_a TopGID: 3 Percent(%): 249(40) MaxLevel: 3 RemPCT: 20 Cores: 0-3
  • 查看用户绑定的资源池

    使用gsql连接数据库。执行如下命令

    1
    2
    3
    4
    5
    SELECT rolrespool FROM PG_AUTHID WHERE rolname = 'rolename';
      rolrespool  
    --------------
     default_pool
    (1 row)
    
  • 查看当前会话绑定的控制组:
    1
    SHOW CGROUP_NAME;
    
  • 查看当前会话绑定的资源池:
    1
    SHOW SESSION_RESPOOL;
    

查看更多:华为GaussDB 200 优先级控制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论