更新时间:2024-09-06 GMT+08:00

开启并行查询

系统参数及状态变量说明

  • 支持的系统参数如表1
    表1 系统参数

    参数名称

    级别

    描述

    force_parallel_execute

    Global, Session

    是否开启并行查询,当设置为“ON”时,表示查询SQL尽可能地使用并行执行。

    • 取值范围:ON, OFF
    • 默认值OFF

    parallel_max_threads

    Global

    并行执行的最大活跃线程个数。当并行执行的活跃线程超过该值时,新的查询将不允许启用并行执行。

    • 取值范围:0-4294967295
    • 默认值:64

    parallel_default_dop

    Global, Session

    并行执行的默认并行度。当查询语句没有指定并行度时,使用该值。

    • 取值范围:0-1024
    • 默认值:4

    parallel_cost_threshold

    Global, Session

    启用并行执行的代价阈值。只有当查询的执行代价超过该阈值时才有可能进行并行执行。

    • 取值范围:0-4294967295
    • 默认值:1000

    parallel_queue_timeout

    Global, Session

    当不满足并行查询的条件时,请求并行执行的SQL等待超时时间。当等待时间超过该值后,则不再等待,开始进行单线程执行。

    • 取值范围:0-4294967295
    • 默认值:0

    parallel_memory_limit

    Global

    并行执行可用的内存上限。当并行执行使用的内存量超过该值时,新的SQL查询将不会进行并行执行。

    • 取值范围:0-4294967295
    • 默认值:104857600
  • 支持的状态变量如表2
    表2 状态变量

    变量名

    级别

    描述

    PQ_threads_running

    Global

    当前正在运行的并行执行的总线程数。

    PQ_memory_used

    Global

    当前并行执行使用的总内存量。

    PQ_threads_refused

    Global

    由于总线程数限制,导致未能执行并行执行的查询总数。

    PQ_memory_refused

    Global

    由于总内存限制,导致未能执行并行执行的查询总数。

开启并行查询

支持通过设置系统参数和使用HINT语法两种方式,开启或关闭并行查询。

  • 方法一:通过设置系统参数开启或关闭并行查询

    在管理控制台的参数修改页面,通过设置系统参数,开启和关闭并行查询,并设置并行度。

    通过全局参数“force_parallel_execute”来控制是否强制启用并行执行。

    使用全局参数“parallel_default_dop”来控制使用多少线程并行执行。

    使用全局参数“parallel_cost_threshold”来控制当执行代价为多大时,开启并行执行。

    上述参数在使用过程中,随时可以修改,无需重启数据库。

    例如,想要强制开启并行执行,并且并发度为4,最小执行代价为0,可参照如下进行设置:

    SET force_parallel_execute=ON
    SET parallel_default_dop=4
    SET parallel_cost_threshold=0
  • 方法二:使用HINT开启或关闭并行查询

    使用HINT语法可以控制单个语句是否进行并行执行。在系统默认关闭并行执行的情况下, 可以使用hint对特定的SQL进行开启。反之,也可以禁止某条SQL进行并行执行。

    开启并行执行:采用下面的HINT语法可以开启并行执行。

    采用默认的参数配置:SELECT /*+ PQ() */ … FROM …

    采用默认的参数配置,同时指定并发度为8:SELECT /*+ PQ(8) */ … FROM …

    采用默认的参数配置,同时指定并行表为t1:SELECT /*+ PQ(t1) */ … FROM …

    采用默认的参数配置,同时指定并行表为t1,并发度为8:SELECT /*+ PQ(t1 8) */ … FROM …

    PQ HINT紧跟着SELECT关键字才能生效。PQ HINT的并发度参数dop正常取值范围[1, min(parallel_max_threads, 1024)]。

    dop超出正常取值范围时,PQ不生效。

    关闭并行执行:当并行查询开启时,可使用"NO_PQ"的hint语法关闭单条SQL的并行执行。

    SELECT /*+ NO_PQ */ … FROM …

    NO_PQ hint的优先级高于PQ hint,如果SQL语句出现NO_PQ hint,即使配置PQ hint,该单条SQL也不会并行执行。

查看并行执行的状态

通过如下SQL,查看并行执行的当前状态,显示结果请见图1

show status like "%PQ%"

图1 状态显示

通过EXPLAIN展示查询语句的并行执行计划,显示结果请见图2

图2 并行执行计划结果展示

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