本文介绍了多机并行执行能力的技术背景、技术原理、适用场景以及使用说明等内容。
背景信息
列存索引(IMCI)是PolarDB的HTAP解决方案。随着用户查询数据量、查询复杂度以及对OSS等外部表的查询需求的增加,单个只读列存节点已无法满足海量数据场景下的性能需求。因此,IMCI提供了多机并行执行能力和资源弹升能力。
技术架构
列存索引多机并行执行技术架构如下:
列存索引多机并行是由多个只读列存节点组成的一个多机执行组,并提供多机并行执行能力。随着用户查询负载的变化,用户可以快速增加或减少只读列存节点的个数,以平衡查询性能和计算成本。
多机并行执行可以处理多种类型的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语句会通过列存索引多机并行执行。