云原生数据仓库AnalyticDB MySQL版支持为内部系统查询、用户普通查询、用户ETL(Extract-Transform-Load)类查询三种查询队列设置最大可运行查询数以及最大排队查询数。

查询队列

为了隔离内部系统查询、用户普通查询、用户ETL(Extract-Transform-Load)类查询(例如INSERT INTO SELECT等)三种查询流量,云原生数据仓库AnalyticDB MySQL版接入层将这三种查询的查询队列进行了隔离。

每个查询队列都可设置最大可运行查询数和最大排队查询数:
  • 当查询队列里正在执行的查询数量≥最大可运行查询数时,新的查询将进入排队状态;
  • 当查询队列里排队状态的查询数量≥最大排队查询数时,新的查询将直接被拒绝;
  • 当正在执行的查询结束时,如果有排队状态的查询,会以FIFO的方式,从排队状态的查询中取下一个查询进入执行状态。
说明 查询队列对INSERT INTO ... VALUE(...)语句不生效。

配置参数

说明
  • 查询队列的参数取值代表单个前端节点的队列大小,不是集群的队列总大小。集群的队列总大小等于单个队列乘以前端节点个数,即集群的队列总大小=单个队列×前端节点个数
  • 查询队列的参数配置对全局前端节点同时生效。
查询类型 查询队列 配置参数 配置项
系统查询 ROOT 固定取值,不支持配置。
  • 单个前端节点的最大可运行查询数:400
  • 单个前端节点的最大排队查询数:500
用户普通查询 NORMAL XIHE_ENV_QUERY_MAX_CONCURRENT_QUERIES 针对用户普通查询,单个前端节点的最大可运行查询数,参数取值范围为1~20。

假设参数取值为20,集群包含3个前端节点,则每个前端节点的最大可运行查询数为20,集群总的最大可运行查询数为60。

XIHE_ENV_QUERY_MAX_QUEUED_QUERIES 针对用户普通查询,单个前端节点的最大排队查询数,参数取值范围为1~200。

假设参数取值为200,集群包含3个前端节点,则每个前端节点的最大排队查询数为200,集群总的最大排队查询数为600。

用户ETL查询 LOW XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE 针对用户ETL查询,单个前端节点的最大可运行查询数,参数取值范围为1~20。

假设参数取值为10,集群包含3个前端节点,则每个前端节点的最大可运行查询数为10,集群总的最大可运行查询数为30。

XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE 针对用户ETL查询,单个前端节点的最大排队查询数,参数取值范围为1~100。

假设参数取值为100,集群包含3个前端节点,则每个前端节点的最大排队查询数为100,集群总的最大排队查询数为300。

调整查询队列

您可以使用下方的语句,配置单个前端节点的查询队列大小。
说明
  • 查询队列的参数取值代表单个前端节点的队列大小,不是集群的队列总大小。集群的队列总大小等于单个队列乘以前端节点个数,即集群的队列总大小=单个队列×前端节点个数
  • 查询队列的参数配置对全局前端节点同时生效。
--用户普通查询队列
set adb_config XIHE_ENV_QUERY_MAX_CONCURRENT_QUERIES=20
set adb_config XIHE_ENV_QUERY_MAX_QUEUED_QUERIES=200

--用户ETL查询
set adb_config XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE=20
set adb_config XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE=100

上述示例,针对用户普通查询,设置单个前端节点的最大可运行查询数为20,最大排队查询数为200;针对用户ETL查询,设置单个前端节点的最大可运行查询数为20,最大排队查询数为100。

指定查询队列

-- 通过Hint指定查询使用LOW队列
/*+coordinator_query_queue=low_priority*/ select * from tbl limit 100;

-- 普通查询使用NORMAL队列
select * from tbl limit 100;

-- ETL查询默认使用LOW队列
insert into dst select * from tbl;

执行优先级

云原生数据仓库AnalyticDB MySQL版的计算模块在执行查询时,为了隔离用户普通查询、用户ETL查询,将查询执行线程也进行了隔离。查询执行线程分为两组NORMAL和LOW:

  • 内部系统查询、用户普通查询由NORMAL线程组执行。
  • 用户ETL查询由LOW线程组执行。

NORMAL线程组相比LOW线程组具有更高的优先级,二者产生资源竞争时,NORMAL线程优先获得CPU资源。

查询类型 执行线程组 优先级
系统查询、普通用户查询 NORMAL
用户ETL查询 LOW

设置执行优先级

-- 通过Hint指定查询使用LOW线程组
/*+direct_low_priority_cpu_queue=true*/ select * from tbl limit 100;

-- 普通查询使用NORMAL线程组
select * from tbl limit 100;

-- ETL查询默认使用LOW线程组
insert into dst select * from tbl;