免费体验弹性并行查询ePQ

本文介绍了如何免费体验弹性并行查询ePQ带来的查询加速及性能提升。

背景

PolarDB MySQL版8.0版本重磅推出弹性并行查询(Elastic Parallel Query,ePQ):将一个复杂查询任务拆分为多个子任务,子任务可以被派发到同集群内的任意节点并发完成计算,从而有效利用集群内其他节点的空闲计算资源(CPU、内存等)来加速查询,使查询耗时指数级下降,并有效提升集群的资源利用率。

弹性并行查询(ePQ)的优势如下:

  • 实时性分析:统一的底层存储,数据实时可见

  • 开箱即用:零附加成本和运维成本,随集群部署

  • 性能优异:打通节点间的计算资源,突破单机硬件性能瓶颈,性能表现优异

  • 提升能效:充分利用空闲计算资源,提升集群整体资源利用率

  • 实时弹性:按需扩容,提供更灵活的弹性计算能力

阿里云提供了数据库解决方案功能体验馆,提供真实免费的PolarDB集群环境和开箱即用的测试方法,您可以在线快捷体验ePQ带来的查询效率提升。

影响

本功能体验不涉及生产环境的部署,因此不会影响业务。

费用

本次体验中,由于体验涉及到的资源不归属于您,因此不会产生任何费用,您可以放心体验。

体验内容

体验环境

在本免费体验中,阿里云提供了预置环境供您操作体验,预置环境的详情如下:

  • 集群:提供了一个PolarDB MySQL版集群。具体如下:

    • 内核版本: 8.0.2.2.19.1

    • 产品版本:企业版

    • 系列:集群版通用规格

    • 集群规格:集群包含1个主节点和1个只读节点,规格都为8核 16GB

    • 存储类型: PSL5

    • 参数设置:parallel_degree_policy参数初始设置为TYPICAL

  • 测试数据集:集群中预置了标准测试集TPCH 100G的数据集,其中具体查询所用的表为part表,数据量为20,000,000条数据。

观测指标

  • CPU占用率:集群中主节点和只读节点的平均CPU使用率。单位:%。

  • 查询耗时:执行特定SQL所耗费的时间。单位:秒。

操作步骤

  1. 进入瑶池解决方案体验馆

  2. 单击核心功能体验,然后单击弹性并行查询-PolarDB查询加速免费体验按钮,进入如下页面:

    image.png

  3. 单击页面下方创建免费体验任务按钮。

  4. 稍等片刻后,单击image.png刷新任务列表,可以看到您创建的体验任务已开始。

    image.png

  5. 单击查看详情,进入实时查询体验页面。

  6. 首先进行未开启ePQ的正常查询任务。

    说明

    请根据页面按钮提示,手动点击按钮执行每一步操作。若在倒计时结束时没有手动点击执行,则会自动执行对应操作。

    1. 单击启动任务按钮开始体验。

    2. 单击配置查询库按钮,自动向PolarDB集群执行如下命令,切换至tpch数据库:

      use tpch;
    3. 单击配置并行策略为LOCAL按钮,自动执行如下命令,将数据库的并行策略设置为LOCAL,即

      set parallel_workers_policy='LOCAL' ;
    4. 单击配置并行度为0按钮,自动执行如下命令,将数据库的并行度设置为0。

      set max_parallel_degree=0;
    5. 单击查看执行计划按钮,自动执行如下命令,查看如下SQL的执行计划。

      explain format=TREE  SELECT SUM(p_retailprice), AVG(p_retailprice)
          ->  , MIN(p_retailprice), MAX(p_retailprice)
          -> FROM part
          -> GROUP BY p_type
          -> ORDER BY 1
          -> LIMIT 1;

      执行计划返回如下:

      +------------------------------------------------------------------------------+
      | EXPLAIN                                                                                                                                                                                                                                                       |
      +------------------------------------------------------------------------------+
      | -> Limit: 1 row(s)
          -> Sort: <temporary>.sum(p_retailprice), limit input to 1 row(s) per chunk
              -> Table scan on <temporary>
                  -> Aggregate using temporary table
                      -> Table scan on part  (cost=2123689.64 rows=19896680)
       |
      +------------------------------------------------------------------------------+
      1 row in set (0.00 sec)

      可以看到,在正常的查询计划中,表扫描和聚集计算都是在一个线程中串行完成。

    6. 单击执行SQL按钮,自动执行上一步执行计划中的SQL:

      SELECT SUM(p_retailprice), AVG(p_retailprice)
          ->  , MIN(p_retailprice), MAX(p_retailprice)
          -> FROM part
          -> GROUP BY p_type
          -> ORDER BY 1
          -> LIMIT 1;

      返回结果如下,执行时间为22.47秒。

      +--------------------+--------------------+--------------------+--------------------+
      | SUM(p_retailprice) | AVG(p_retailprice) | MIN(p_retailprice) | MAX(p_retailprice) |
      +--------------------+--------------------+--------------------+--------------------+
      |       198461679.87 |        1498.366804 |             901.47 |            2098.51 |
      +--------------------+--------------------+--------------------+--------------------+
      1 row in set (22.47 sec)
    7. 整个过程中,您可以在左侧趋势图中观测集群平均CPU使用率的变化情况。

  7. 在正常查询完成后,任务将自动切至ePQ查询任务。请根据页面按钮提示,手动点击按钮执行每一步操作。若在倒计时结束时没有手动点击执行,则会自动执行对应操作。

    1. 单击配置跨机并行查询按钮,自动执行如下命令,开启ePQ功能。

      set parallel_workers_policy='MULTI_NODES';
    2. 单击配置并行度为4按钮,自动执行如下命令,设置ePQ的并行度为4。

      set max_parallel_degree=4;
    3. 单击查看执行计划按钮,自动执行如下命令,查看相同SQL的执行计划。

      explain format=TREE SELECT SUM(p_retailprice), AVG(p_retailprice)
          ->  , MIN(p_retailprice), MAX(p_retailprice)
          -> FROM part
          -> GROUP BY p_type
          -> ORDER BY 1
          -> LIMIT 1;

      执行计划返回如下:

      +-----------------------------------------------------------------------------------------------------------------------------------+
      | EXPLAIN                                                                                                                           |
      +-----------------------------------------------------------------------------------------------------------------------------------+
      | -> Limit: 1 row(s)  (cost=2026377.94 rows=1)
          -> Gather (merge sort; slice: 1; workers: 8; nodes: 2)  (cost=2026377.94 rows=8)
              -> Limit: 1 row(s)  (cost=2026366.65 rows=1)
                  -> Sort: <temporary>.sum(p_retailprice), limit input to 1 row(s) per chunk  (cost=2026366.65 rows=248708)
                      -> Table scan on <temporary>
                          -> Aggregate using temporary table  (cost=2026366.65 rows=248708)
                              -> Repartition (hash keys: part.p_type; slice: 2; workers: 8; nodes: 2)  (cost=1767690.54 rows=248709)
                                  -> Table scan on <temporary>
                                      -> Aggregate using temporary table  (cost=1732861.35 rows=248708)
                                          -> Parallel table scan on part, with parallel partitions: 798  (cost=265461.20 rows=2487085)
       |
      +-----------------------------------------------------------------------------------------------------------------------------------+
      1 row in set (0.00 sec)

      可以看到,在ePQ下的查询中,该查询中的表扫描和聚集计算均被下推到了2个节点一共8个worker线程中并发计算。

    4. 单击执行SQL按钮,自动执行该SQL:

      SELECT SUM(p_retailprice), AVG(p_retailprice)
          ->  , MIN(p_retailprice), MAX(p_retailprice)
          -> FROM part
          -> GROUP BY p_type
          -> ORDER BY 1
          -> LIMIT 1;

      返回结果如下,执行时间为2.82秒。

      +--------------------+--------------------+--------------------+--------------------+
      | SUM(p_retailprice) | AVG(p_retailprice) | MIN(p_retailprice) | MAX(p_retailprice) |
      +--------------------+--------------------+--------------------+--------------------+
      |       198461679.87 |        1498.366804 |             901.47 |            2098.51 |
      +--------------------+--------------------+--------------------+--------------------+
      1 row in set (2.82 sec)
    5. 整个执行SQL的过程中,您可以在左侧趋势图中观测集群平均CPU使用率的变化情况。

      说明

      由于实时监控数据可能存在延迟,为了确保展示完整的CPU变化情况,趋势图中会在SQL执行完后,自动延长一定监控时间(2~3秒)。

  8. (可选)对于已创建的任务,您可以在弹性并行查询ePQ页面,单击体验记录,在弹出的面板中,单击全部任务我的任务,查看体验结果详情。

结果分析

ePQ极大地提升了查询效率

  1. 从执行时间上看,当开启ePQ后,复杂查询的执行时间大幅缩短,从22.47秒缩短至2.82秒。

  2. 从执行计划上看,执行的SQL语句是进行SUM聚集计算。

    • 在正常查询的执行计划中,该查询中表扫描和聚集计算都是在一个线程中串行完成;

    • 在ePQ查询的执行计划中,该查询中表扫描和聚集计算均被下推到了2个节点共8个worker线程中并发计算。

ePQ充分利用空闲计算资源,提升了集群整体资源利用率

从集群平均CPU占用率上看,ePQ查询下的CPU占用率比正常查询高。这是因为开启ePQ后,充分利用空闲计算资源,让空闲的计算节点也加入计算。

说明
  • 由于实时监控数据可能存在延迟,为了确保展示完整的CPU变化情况,趋势图中会在SQL执行完后,自动延长一定监控时间(2~3秒)。

  • 在实际应用场景中,您可以自由设置并行度,从而实现对CPU占用率的调控。

image.png

相关内容

专家面对面

您可以使用钉钉扫码加入官方钉钉群,获取更多技术支持。

image.png