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

查询队列

为隔离内部系统查询、用户普通查询、用户ETL(Extract-Transform-Load)类查询(例如Insert into select)三种查询流量,云原生数据仓库MySQL版(简称ADB MySQL版)接入层将这三种查询的查询队列进行了隔离,而且ADB MySQL版支持为每种查询的查询队列设置最大可运行查询数以及最大排队查询数。

类型 查询队列 最大可运行查询数 最大排队查询数 配置项
系统查询 ROOT 400 500
  • XIHE_ENV_QUERY_ROOT_MAX_CONCURRENT_QUERIES
  • XIHE_ENV_QUERY_ROOT_MAX_QUEUED_QUERIES
用户普通查询 NORMAL 20 200
  • XIHE_ENV_QUERY_MAX_CONCURRENT_QUERIES
  • XIHE_ENV_QUERY_MAX_QUEUED_QUERIES
用户ETL查询 LOW 20 100
  • XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE
  • XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE
  • 当查询队列中正在执行的查询数量大于或者等于最大可运行查询数时,新的查询将进入排队状态。
  • 当查询队列中处于排队状态的查询数量大于或者等于最大排队查询数时,新的查询将直接被拒绝。
  • 当正在执行的查询结束时,如果有排队状态的查询,ADB MySQL版将以FIFO(First Input First Output)方式从排队状态的查询中选取下一个查询进入执行状态。
说明 队列大小为单个前端节点大小,整个集群的队列大小等于单个队列乘以前端节点个数,即集群的队列大小=单个队列*前端节点个数

调整查询队列

-- 系统查询队列
set adb_config XIHE_ENV_QUERY_ROOT_MAX_CONCURRENT_QUERIES=400
set adb_config XIHE_ENV_QUERY_ROOT_MAX_QUEUED_QUERIES=500

--用户普通查询队列
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_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20
set adb_config XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE=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;

查询执行优先级

ADB 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;