文档

Interactive型资源组的优先级队列与并发控制

更新时间:

为了更细致地控制查询并发数,AnalyticDB MySQL版湖仓版(3.0)数仓版(3.0)的资源组提供了优先级队列的能力。每个资源组都有自己的一组优先级队列,包括LOWEST队列、LOW队列、NORMAL队列和HIGH队列。您可以设置查询的优先级,使不同查询进入不同的优先级队列,并通过修改队列并发数来对查询进行限流或放大并发。本文介绍如何设置查询的优先级,以及如何设置队列的并发数。

前提条件

集群内核版本为3.1.6.3及以上版本。

说明 如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

功能概述

每个资源组都有一组查询优先级队列。一组查询优先级队列包含四个队列,分别为LOWEST队列、LOW队列、NORMAL队列和HIGH队列。默认情况下,普通SELECT查询进入NORMAL队列,其他ETL查询(例如INSERT INTO SELECTDELETE SELECTINSERT OVERWRITE INTO SELECT,会进入LOWEST队列。同时,您可以设置查询的优先级,使不同查询进入不同的优先级队列。同一队列内部,优先级高的查询会优先运行。各队列的优先级范围如图所示:优先级队列

每个查询优先级队列都可设置最大可运行查询数和最大排队查询数。

  • 当查询优先级队列里正在执行的查询数量≥最大可运行查询数时,新的查询将进入排队状态。

  • 当查询优先级队列里排队状态的查询数量≥最大可排队查询数+最大可运行查询数时,新的查询将直接被拒绝。

  • 当正在执行的查询结束时,如果有排队状态的查询,优先级高的查询优先执行,同优先级查询以FIFO方式从排队状态的查询中取下一个查询进入执行状态。

开启查询优先级

  • 内核版本为3.1.8.2及以上版本的AnalyticDB MySQL集群默认开启查询优先级。

  • 内核版本为3.1.6.3~3.1.8.2(不包含3.1.8.2)版本,需执行下方语句,开启查询优先级。

SET ADB_CONFIG XIHE_ENV_QUERY_PRIORITY_QUEUE_ENABLE=true;
说明 如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

设置查询优先级

默认情况下,ELT查询的优先级为LOWEST(对应取值为5),普通查询(SELECT)的优先级为NORMAL(对应取值为25)。如果需要提高或降级查询的优先级,可参考下文设置查询的优先级。

注意事项

INSERT INTO ... VALUES(...)语句不支持设置查询优先级。

设置方法

  • (推荐)通过Workload Manager自动添加HINT。详细信息,请参见查询优先级

  • 手动添加以下HINT语句,配置查询优先级。

    /*query_priority=<优先级取值>*/ select_statement

    优先级取值说明:取值可以为整数,范围为0~39。数值越大优先级越高。取值也可以为字符串,包括LOWEST、LOW、NORMAL、HIGH,分别对应的整数为5、15、25、35。

示例

  • 设置优先级为HIGH,使查询进入HIGH队列。

    /*query_priority=HIGH*/ SELECT * FROM test_table;
  • 设置优先级为35,使查询进入HIGH队列。

    /*query_priority=35*/ SELECT * FROM test_table;

设置队列并发

优先级队列的并发设置分为全局设置和资源组设置。

设置方法

  • 设置全局的优先级队列并发:SET ADB_CONFIG <并发参数> = <取值>

  • 设置资源组的优先级队列并发:SET ADB_CONFIG <资源组名称>.<并发参数> = <取值>

    重要

    数仓版(3.0)弹性模式集群(32核及以上)湖仓版(3.0)集群支持设置资源组的优先级队列并发数。

并发参数列表

说明
  • 查询优先级队列的参数取值代表单个前端节点的队列大小,不是集群的队列总大小。集群的队列总大小等于单个队列乘以前端节点个数,即集群的队列总大小=单个队列×前端节点个数。

  • 查询优先级队列的参数配置对全局前端节点同时生效。

  • 前端节点即FrontNode,更多详细信息,请参见接入层高可用

队列名

配置参数

默认值

说明(对单个资源组)

LOWEST(ETL) 队列

XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE

20

单个前端节点LOWEST队列的最大可运行查询数为20。

XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE

200

单个前端节点LOWEST队列的最大可排队查询数为200。

LOW队列

XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE

20

单个前端节点LOW队列的最大可运行查询数为20。

XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE

200

单个前端节点LOW队列的最大可排队查询数为200。

NORMAL队列

XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE

20

单个前端节点NORMAL队列的最大可运行查询数为20。

XIHE_ENV_QUERY_NORMAL_MAX_QUEUED_SIZE

200

单个前端节点NORMAL队列的最大可排队查询数为200。

HIGH队列

XIHE_ENV_QUERY_HIGH_MAX_CONCURRENT_SIZE

40

单个前端节点HIGH队列的最大可运行查询数为40。

XIHE_ENV_QUERY_HIGH_MAX_QUEUED_SIZE

400

单个前端节点HIGH队列的最大可排队查询数为400。

示例

  • 修改集群的LOW队列最大可运行查询数为5。

    SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE = 5;
  • 修改rg1资源组的LOW队列最大可运行查询数为5。

    SET ADB_CONFIG rg1.XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE = 5;

查看队列并发

  • 查看全局的最大可运行查询数和最大排队查询数:SHOW ADB_CONFIG KEY=<并发参数>;

  • 查看某个资源组的最大可运行查询数和最大排队查询数:SHOW ADB_CONFIG KEY=<资源组名称>.<并发参数>;

  • 本页导读 (1)
文档反馈