暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

芬芳 2023-11-17
172

背景信息

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

技术架构

列存索引多机并行执行技术架构如下:
image.png
列存索引多机并行是由多个只读列存节点组成的一个多机执行组,并提供多机并行执行能力。随着用户查询负载的变化,用户可以快速增加或减少只读列存节点的个数,以平衡查询性能和计算成本。
多机并行执行可以处理多种类型的AP负载,IMCI的优化器可以准确判断出适合查询语句的TP,并选择单机执行AP或多机并行执行AP,最终将查询语句调度到适合的列存节点上。

适用场景

通过多机并行的资源弹升能力扩展CPU和IOPS,降低查询时延。
通过每台机器只处理部分数据来提升数据缓存能力,将单机无法做到的全内存场景转变为多机全内存场景,从而提升查询的吞吐量。

版本限制

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

使用说明

添加多个只读列存节点。具体操作请参见添加只读列存节点。
通过钉钉搜索群号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语句会通过列存索引多机并行执行。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论