并行查询

更新时间:
复制 MD 格式

云原生数据仓库AnalyticDB PostgreSQL提供了单表查询的并行查询功能。在低并发场景下,开启并行查询,对大数据量单表聚合查询,能够减少约50%的查询时间。

功能说明

如果您的实例Segment节点是4核及以上规格,单表查询将自动开启并行查询,提升多核并发能力、降低查询时间。系统会通过当前并发数、Segment配置和SQL信息,自动选择并行度,在检测到当前系统负载较大时会关闭并行查询。

说明
  • 请确保您的实例内核小版本为6.3.4.0及以上版本,如何升级小版本,请参见版本升级

  • 并行查询适用于4核及以上规格的实例。

测试示例

用于测试的AnalyticDB PostgreSQL实例规格如下:

  • Segment节点规格:4C32G

  • Segment节点数量:4

在数据库中导入10 GB测试数据,并行加速前后的单表查询时间耗时如下:

  • 并行加速前

    
    postgres=# select
    l_returnflag,
    l_linestatus,
    sum(l_quantity) as sum_qty,
    sum(l_extendedprice) as sum_base_price,
    sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
    sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
    avg(l_quantity) as avg_qty,
    avg(l_extendedprice) as avg_price,
    avg(l_discount) as avg_disc,
    count(*) as count_order
    from
    lineitem
    where
    l_shipdate <= date '1998-12-01' - interval '90' day
    group by
    l_returnflag,
    l_linestatus
    order by
    l_returnflag,
    l_linestatus;
     l_returnflag | l_linestatus |  sum_qty   | sum_base_price  |  sum_disc_price     |     sum_charge       |       avg_qty        |     avg_price       |        avg_disc          | count_order
    --------------+--------------+-----------+-----------------+---------------------+----------------------+----------------------+---------------------+--------------------------+------------
     A            | F            | 377518399 | 566065727797.25 | 537759104278.0656   | 559276670892.116819  | 25.5009751030070973  | 38237.151008958546  | 0.05000065745402432046   3 |  14804077
     N            | F            |   9851614 |  14767438399.17 |  14028805792.2114   |  14590490998.366737  | 25.5224483028409474  | 38257.810660081140  | 0.04997336773765667183   0 |    385998
     N            | O            | 743124873 | 1114302286901.88| 1058580922144.9638  | 1100937000170.591854 | 25.4980758706893147  | 38233.902923481810  | 0.05000081182131310603   3 |  29144351
     R            | F            | 377732830 | 566431054976.00 |  538110922664.7677  |  559634780885.086257 | 25.5083847896801383  | 38251.219273559761  | 0.04999967923140874204   5 |  14808183
    (4 rows)
    
    Time: 17456.066 ms
    
  • 并行加速后

    
    postgres=# select
    l_returnflag,
    l_linestatus,
    sum(l_quantity) as sum_qty,
    sum(l_extendedprice) as sum_base_price,
    sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
    sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
    avg(l_quantity) as avg_qty,
    avg(l_extendedprice) as avg_price,
    avg(l_discount) as avg_disc,
    count(*) as count_order
    from
    lineitem
    where
    l_shipdate <= date '1998-12-01' - interval '90' day
    group by
    l_returnflag,
    l_linestatus
    order by
    l_returnflag,
    l_linestatus;
     l_returnflag | l_linestatus | sum_qty   | sum_base_price   | sum_disc_price     | sum_charge          | avg_qty             | avg_price          | avg_disc                | count_order
    --------------+--------------+-----------+------------------+--------------------+---------------------+--------------------+--------------------+------------------------+-------------
     A            | F            | 377518399 | 566065727797.25  | 537759104278.0656  | 559276670892.116819 | 25.5009751030070973 | 38237.151008958546 | 0.050000657454024320463 |    14804077
     N            | F            |   9851614 | 14767438399.17   | 14028805792.2114   | 14590490998.366737  | 25.5224483028409474 | 38257.810660081140 | 0.049973367737656567180 |      385998
     N            | O            | 743124873 | 1114302286901.88 | 1058580922144.9638 | 1100937000170.591854 | 25.4980758706893147 | 38233.902923481810 | 0.05000081182113130603 |    29144351
     R            | F            | 377732830 | 566431054976.00  | 538110922664.7677  | 559634780885.086257 | 25.5083847896801383 | 38251.219273559761 | 0.04999679231408742045 |    14808183
    (4 rows)
    
    Time: 9407.291 ms
    

并行加速前

并行加速后

17456.066ms

9407.291ms