閱讀667 返回首頁    go 阿裏雲


4.4 多計算引擎和Hint__第四章 DML_使用手冊_分析型數據庫-阿裏雲

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非分區列。

最後更新:2016-12-06 11:56:37

  上一篇:go 4.3 INSERT/DELETE命令__第四章 DML_使用手冊_分析型數據庫-阿裏雲
  下一篇:go 5.1 數據的導入__第五章 Data Pipeline_使用手冊_分析型數據庫-阿裏雲