GaussDB(for MySQL)并行查询
GaussDB(for MySQL)并行查询(PQ)
云数据库GaussDB(for MySQL)支持了并行执行的查询方式,用以降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。并行查询的基本实现原理是将查询任务进行切分并分发到多个CPU核上进行计算,充分利用cpu的多核计算资源来缩短查询时间。并行查询的性能提升倍数理论上与CPU的核数正相关,也就是说并行度越高能够使用的CPU核数就越多,性能提升的倍数也就越高。
下图是使用CPU多核资源并行计算一个表的count(*)过程的基本原理:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。具体如下:
前提条件
云数据库GaussDB(for MySQL)的引擎版本为MySQL 8.0.22及以上。
应用场景
并行查询适用于大部分SELECT语句,例如大表查询、多表连接查询、计算量较大的查询。对于非常短的查询,效果不太显著。
轻分析类业务
报表查询通常SQL复杂而且比较耗费时间,通过并行查询可以加速单次查询效率。
系统资源相对空闲
并行查询会使用更多的系统资源,只有当系统的CPU较多、IO负载不高、内存够大的时候,才可以充分使用并行查询来提高资源利用率和查询效率。
数据频繁查询
针对数据密集型查询,通过并行查询,可以提高查询处理执行效率,减少网络流量和计算节点的压力。
说明:并行查询特性当前处于公测阶段,建议在测试环境使用。
GaussDB(for MySQL)并行查询特性支持场景
并行查询支持场景
并行查询支持以下场景:
1、支持全表扫描、索引扫描、索引范围扫描、索引逆序扫描、索引点查询、索引下推等。
2、支持单表查询、多表JOIN、视图view、子查询,部分CTE查询等。
3、支持多种JOIN算法,包括:BNL Join、BKA Join、HASH Join、Nested loop Join、Semi Join、Anti Join、outer Join等。
4、支持多种子查询,包括:条件子查询、scalar子查询、部分关联子查询、非关联子查询、derived table等。
5、支持多种数据类型,包括:整型数据、字符型数据、浮点型数据、时间型数据等。
6、支持算术表达式计算(+、-、*、%、/、|、&),条件表达式运算(<、<=、>、>=、<>、between/and、In等),逻辑运算(or、and、not等),一般函数(字符函数、整型函数、时间函数等),聚合函数(count/sum/avg/min/max)等等。
说明:count聚合函数需关闭innodb_parallel_select_count才能并行执行。
7、支持非分区表查询、分区表单分区查询。
8、支持排序order by、分组group by/distinct、分页limit/offset、过滤where/having、列投影等。
9、支持UNION/UNION ALL查询。
10、支持Explain查看并行执行计划多种方式,包括传统Explain、Explain format=tree、Explain format=json等。
GaussDB(for MySQL)开启/关闭并行查询
方法一:通过设置系统参数开启/关闭并行查询
在管理控制台的参数修改页面,通过设置系统参数,开启和关闭并行查询,并设置并行度。
通过全局参数force_parallel_execute来控制是否强制启用并行执行;
使用全局参数parallel_default_dop来控制使用多少线程并行执行;
使用全局参数parallel_cost_threshold来控制当执行代价为多大时,开启并行执行。
上述参数在使用过程中,随时可以修改,无需重启数据库。
例如,想要强制开启并行执行,并且并发度为4,最小执行代价为0,可参照如下进行设置:
SET force_parallel_execute=ON
SET parallel_default_dop=4
SET parallel_cost_threshold=0
方法二:使用hint开闭/关闭并行查询
使用hint语法可以控制单个语句是否进行并行执行。在系统默认关闭并行执行的情况下, 可以使用hint对特定的SQL进行开启。反之,也可以禁止某条SQL进行并行执行。
开启并行执行:采用下面的hint语法可以开启并行执行。
采用默认的参数配置:SELECT /*+ PQ() */ … FROM …
采用默认的参数配置,同时指定并发度为8:SELECT /*+ PQ(8) */ … FROM …
采用默认的参数配置,同时指定并行表为t1:SELECT /*+ PQ(t1) */ … FROM …
采用默认的参数配置,同时指定并行表为t1,并发度为8:SELECT /*+ PQ(t1 8) */ … FROM …
说明:并行查询PQ hint紧跟着SELECT关键字才能生效。PQ hint的并发度参数dop正常取值范围[1, min(parallel_max_threads, 1024)]。
dop超出正常取值范围时,并行查询PQ不生效。
关闭并行执行:当并行查询开启时,可使用"NO_PQ"的hint语法关闭单条SQL的并行执行。
SELECT /*+ NO_PQ */ … FROM …
云数据库GaussDB(for MySQL)常见问题解答
云数据库GaussDB(for MySQL)常见问题解答
专题内容推荐
活动对象:华为云电销客户及渠道伙伴客户可参与消费满送活动,其他客户参与前请咨询客户经理
活动时间: 2020年8月12日-2020年9月11日
活动期间,华为云用户通过活动页面购买云服务,或使用上云礼包优惠券在华为云官网新购云服务,累计新购实付付费金额达到一定额度,可兑换相应的实物礼品。活动优惠券可在本活动页面中“上云礼包”等方式获取,在华为云官网直接购买(未使用年中云钜惠活动优惠券)或参与其他活动的订单付费金额不计入统计范围内;