全部产品
分析型数据库

4.4 多计算引擎和Hint

更新时间:2017-06-07 13:26:11   分享:   

4.4 多计算引擎和Hint

本节内容适用于分析型数据库的0.9.15或以上版本。

文中提及的Full MPP Mode,在公共云中当前处于公测状态,默认全体用户开通(除非用户申请关闭),用户可以按需使用。在专有云中,若您的集群或数据库没有开通该功能,请联系运维管理员或DBA开通。

Join的小表广播

在0.8.35版本后,分析型数据库支持小表广播模式进行一种特殊的高性能关联:虽然不符合关联四原则中分区列等值或分区数一致的原则,但是关联的左表(或子查询)/右表(或子查询)中有一个表(或子查询)很小(一般不建议超过3万行,5列,512KB),则可以通过小表广播模式快速关联,例如:

  1. /*+engine=COMPUTENODE*/
  2. select A.a, B.b from (select/*+broadcast=true*/ a from B where c=100) A join B on A.a = B.a;

其中A子查询数据量较小,是被广播的表,B表数据量无限制。这种Join性能也是较好的。

查询hint

分析型数据库在v2.0(0.9.45)后提供了两种hint用于优化查询。相关hint的使用建议咨询专业人员。

no-index

用于指定某列不使用索引。一般用于在多个where过滤条件中,存在1-2个条件筛选率非常低,导致索引装载时间消耗很长,反而不如不用索引时。

示例:

  1. select a1, a2, count(distinct a3) rs from a join b on a.a1 = b.a1 and b.a4 in ('110', '120') and a.aa3 = 1003 and b.aa2 <= 201503 group by a1, a2;

该sql中,aa2筛选率很差,所以应该增加no-index hint

  1. /*+no-index=[b.aa2]*/
  2. select a1, a2, count(distinct a3) rs from a join b on a.a1 = b.a1 and b.a4 in ('110', '120') and a.aa3 = 1003 and b.aa2 <= 201503 group by a1, a2;

nocache

不常用,用于某些列在查询中不适合进入缓存时指定其不进入缓存。

用法:

  1. /*+no-cache=[colname]*/
  2. select ...

多计算引擎

在0.9.15或更高版本的分析型数据库中,拥有两套计算引擎:

  • COMPUTENODE Local/Merge(简称LM):先前版本的旧计算引擎,优点是计算性能很好,并发能力强,缺点是对部分跨一级分区列的计算支持较差。
  • Full MPP Mode(简称MPP):0.9.5版本新增的计算引擎,优点是计算功能全面,对跨一级分区列的计算有良好的支持,可以通过全部TPC-H查询测试用例(22个),和60%以上的TPC-DS查询测试用例。缺点是计算性能相对LM引擎较差,并且计算并发能力相对很差。

Full MPP Mode计算引擎目前(2016年12月起)已向全体用户公测,除非已申请关闭Full MPP Mode,否则用户可以自行判断自己的Query合适哪一种计算引擎,使用Hint强制将查询路由到某一个计算引擎中:

  1. --强制使用COMPUTENODE LM计算引擎(默认)
  2. /*+engine=COMPUTENODE*/
  3. select * from ....
  4. --强制使用Full MPP Mode计算引擎
  5. /*+engine=MPP*/
  6. select * from ....

目前使用Full MPP Mode时请注意以下问题:

(1)Full MPP Mode目前尚处于公测状态,阿里云不对Full MPP Mode的计算的可靠性、性能、稳定性做出承诺;

(2)Full MPP Mode查询响应时间和并发能力较差,建议用户仅在低频调用的、对性能不敏感的、必须使用Full MPP Mode计算引擎的情况下使用;

(3)Full MPP Mode计算引擎当前使用时语法结构同默认引擎有两处差异(后续会修正):1)进行timestamp/date类型和字符串比较时,需要在字符串前声明比较类型,如 m > timestamp ‘2016-08-20 00:00:00’, n < date ‘2016-08-20’ (m为timestamp类型,n为date类型)。

(4)Full MPP Mode计算引擎拥有较丰富的数学函数、字符串处理函数、窗口函数等支持,但是这些函数和功能尚未稳定,未来其功能和语法均可能修改,故使用手册中不予列出,有需要的客户可以提交工单咨询相关用法,但阿里云不对这些功能未来的兼容性和可靠性做出承诺。

分析型数据库亦支持自动对查询Query进行路由功能,可以将LM引擎不支持的查询路由给MPP引擎,尽可能兼顾性能和通用性。但是由于Full MPP Mode的稳定性和兼容性问题,默认不开启自动路由功能,有需要的用户可以进行工单申请。

开启自动路由功能后,目前以下几种情况会自动路由到Full MPP Mode:

  • 特定函数,如row_number over等,LM模式不识别,捕获异常;

  • Join类:

    • 事实表 join 事实表,join key全部在非分区列上;
    • 不同表组的事实表 join 事实表;
    • 维度表在前,left join 事实表;
    • 事实表 right join 维度表(同上);
    • 事实表 join 事实表,一级分区数不同。
  • Group By、Order By、Having类:

    • Group By仅含非分区列,外层套子查询;
    • Group By仅含非分区列,带Order By;
    • Group By仅含非分区列,带Having。
  • UNION/INTERSECT/MINUS不含分区列;

  • SELECT 复杂表达式,如SUM/SUM, 任何带聚合函数的计算表达式等;

  • COUNT DISTINCT或DISTINCT非分区列。

本文导读目录
本文导读目录
以上内容是否对您有帮助?