使用并行查询
TaurusDB支持并行查询,您可以通过控制台或Hint语法,为实例开启或关闭并行查询功能。
使用须知
- 只读节点和主节点均支持并行查询,由于并行查询对计算资源(CPU、内存等)比较消耗,考虑到实例稳定性,云数据库TaurusDB的内核版本为2.0.42.230600及以上时,并行查询默认在主节点不生效,如需使用,请提交工单。
- 使用了offset或者limit查询,不添加order by条件时,并行执行下返回的结果集顺序可能与非并行不一致,会出现结果集不同的现象,需要添加order by主键或者唯一键来保证结果集正确。
系统参数及状态变量说明
参数名称 | 级别 | 描述 |
|---|---|---|
force_parallel_execute | Global | 是否开启并行查询。
|
pq_master_enable | Global | 是否在主机开启并行查询,需要与参数force_parallel_execute配合使用。
|
parallel_default_dop | Global, Session | 并行执行的默认并行度。当查询语句没有指定并行度时,使用该值。
|
parallel_max_threads | Global | 并行执行的最大活跃线程个数。当并行执行的活跃线程超过该值时,新的查询将不允许启用并行执行。
|
parallel_limit_no_order_by | Global, Session | 控制查询块中有limit子句无order by子句时是否走并行查询。
|
parallel_cost_threshold | Global, Session | 启用并行执行的代价阈值。只有当查询的执行代价超过该阈值时才有可能进行并行执行。
|
parallel_queue_timeout | Global, Session | 当不满足并行查询的条件时,请求并行执行的SQL等待超时时间。当等待时间超过该值后,则不再等待,开始进行单线程执行。
|
parallel_memory_limit | Global | 并行执行可用的内存上限。当并行执行使用的内存量超过该值时,新的SQL查询将不会进行并行执行。
|
parallel_setup_cost | Global, Session | 启动初始化并行执行的代价。用于估算并行执行的总代价。
|
parallel_tuple_cost | Global, Session | 并行执行消息传递单条记录的代价。用于估算并行执行的总代价。
|
变量名 | 级别 | 描述 |
|---|---|---|
PQ_stmt_executed | Global | 并行查询优化累计生效的次数。 |
PQ_threads_running | Global | 当前正在运行的并行执行的总线程数。 |
PQ_memory_used | Global | 当前并行执行使用的总内存量。 |
PQ_threads_refused | Global | 由于总线程数限制,导致未能执行并行执行的查询总数。 |
PQ_memory_refused | Global | 由于总内存限制,导致未能执行并行执行的查询总数。 |
开启并行查询
支持通过在控制台设置系统参数和使用HINT语法两种方式,开启或关闭并行查询。
在管理控制台的参数修改页面,通过设置系统参数,可以全局开启或关闭并行查询,并调整并行度。
- 登录TaurusDB管理控制台。
- 单击管理控制台左上角的
,选择区域和项目。 - 进入“实例管理”页面,在实例列表中单击目标实例名称,进入实例概览页面。
- 在左侧导航栏中单击“参数修改”,进入“参数修改”页面。
您还可以在实例概览页面右上角单击
,选择“参数修改”,进入参数修改页面。 - 设置系统参数,开启并行查询,表3的参数在使用过程中,支持动态修改,无需重启数据库。
表3 并行查询系统参数 参数
说明
force_parallel_execute
是否强制启用并行查询。
pq_master_enable
主机是否开启并行查询。
parallel_default_dop
使用并行执行的线程数。
parallel_cost_threshold
启动并行查询的代价阈值,默认值为1000,不建议将该值设置的过小,因为简单查询不适合使用并行查询。
也支持会话内修改并行查询并发度,修改启动并行查询的代价阈值,例如将并发度调整为8,最小执行代价调整为100,可参照如下进行设置:
SET parallel_default_dop=8; SET parallel_cost_threshold=100;
使用HINT语法可以控制单个语句是否进行并行执行。在系统默认关闭并行执行的情况下, 可以使用hint对特定的SQL进行开启。反之,也可以禁止某条SQL进行并行执行。
PQ HINT紧跟着SELECT关键字才能生效。PQ HINT的并发度参数parallel_default_dop正常取值范围[1, min(parallel_max_threads, 1024)]。parallel_default_dop超出正常取值范围时,PQ不生效。
- 开启并行执行
- 采用默认的参数配置。
SELECT /*+ PQ() */ … FROM …
- 采用默认的参数配置,同时指定并发度为8。
SELECT /*+ PQ(8) */ … FROM …
- 采用默认的参数配置,同时指定并行表为t1。
SELECT /*+ PQ(t1) */ … FROM …
- 采用默认的参数配置,同时指定并行表为t1,并发度为8。
SELECT /*+ PQ(t1 8) */ … FROM …
- 采用默认的参数配置。
- 关闭并行执行
当并行查询开启时,可使用"NO_PQ"的hint语法关闭单条SQL的并行执行。
NO_PQ hint的优先级高于PQ hint,如果SQL语句出现NO_PQ hint,即使配置PQ hint,该单条SQL也不会并行执行。SELECT /*+ NO_PQ */ … FROM …
查看并行执行的状态
通过如下SQL,查看并行执行的当前状态,显示结果请见图1。
show status like "%PQ%"
通过EXPLAIN展示查询语句的并行执行计划,显示结果请见图2。

与传统的执行计划相比,并行执行计划多了一行记录。在查询结果的第一行,展示了并发度、并行表等信息。



