使用多机MPP对海量数据分析提速

本文介绍了多机并行执行能力的技术背景、技术原理、适用场景以及使用说明等内容。

背景信息

列存索引(IMCI)是PolarDB的HTAP解决方案。随着用户查询数据量、查询复杂度以及对OSS等外部表的查询需求的增加,单个只读列存节点已无法满足海量数据场景下的性能需求。因此,IMCI提供了多机并行执行能力和资源弹升能力。

技术架构

列存索引多机并行执行技术架构如下:

image

列存索引多机并行是由多个只读列存节点组成的一个多机执行组,并提供多机并行执行能力。随着用户查询负载的变化,用户可以快速增加或减少只读列存节点的个数,以平衡查询性能和计算成本。

多机并行执行可以处理多种类型的AP负载,IMCI的优化器可以准确判断出适合查询语句的TP,并选择单机执行AP或多机并行执行AP,最终将查询语句调度到适合的列存节点上。

适用场景

  • 通过多机并行的资源弹升能力扩展CPU和IOPS,降低查询时延。

  • 通过每台机器只处理部分数据来提升数据缓存能力,将单机无法做到的全内存场景转变为多机全内存场景,从而提升查询的吞吐量。

版本限制

PolarDB MySQL版集群的产品版本需为企业版,集群版本需为PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.38及以上。

使用说明

  1. 添加多个只读列存节点。具体操作请参见添加只读列存节点

  2. 通过钉钉搜索群号27520023189并加入该群,将会有对应的研发人员协助您开启并使用列存索引的多机并行能力。

性能测试

列存索引的多机并行执行性能测试请参见列存索引(IMCI)性能

其他操作

  • 判断当前SQL语句是否可以使用列存索引的多机并行能力

    您可以通过在SQL语句中添加HINT语法SET_VAR(imci_plan_use_mpp=forced)来查看SQL语句的执行计划,以此来判断该SQL语句是否可以使用多机并行能力。示例如下:

    EXPLAIN SELECT /*+ SET_VAR(imci_plan_use_mpp=forced) */ COUNT(*) FROM nation;

    查询结果如下:

    +----+----------------------------+--------+---------------------------------------------------------------------------------+
    | ID | Operator                   | Name   | Extra Info                                                                      |
    +----+----------------------------+--------+---------------------------------------------------------------------------------+
    |  1 | Select Statement           |        | IMCI Execution Plan (max_dop = 11, max_query_mem = 37438953472)                 |
    |  2 | └─Compute Scalar           |        |                                                                                 |
    |  3 |   └─Aggregation            |        |                                                                                 |
    |  4 |     └─Consume              |        | Consume ProducerPipeId: 1                                                       |
    |  5 |       └─Exchange           |        | PipeId: 1, Consumers: 23377031, Producers: 23377031,23377032, Part Type: Gather |
    |  6 |         └─Aggregation      |        |                                                                                 |
    |  7 |           └─Table Scan     | nation |                                                                                 |
    +----+----------------------------+--------+---------------------------------------------------------------------------------

    若执行计划中有Exchange算子,则表示该SQL语句可以使用列存索引的多机并行能力。

  • 判断某条SQL语句是否会通过列存索引的多机并行能力执行

    当判断出某条SQL语句可以使用列存索引的并行执行能力后,您可以通过查看某条SQL语句的执行计划来查看是否会使用列存索引的多机并行能力。若执行计划中有Exchange算子,则表示该SQL语句会通过列存索引多机并行执行。