TaurusDB并行查詢
TaurusDB并行查詢(PQ)
云數(shù)據(jù)庫TaurusDB支持了并行執(zhí)行的查詢方式,用以降低分析型查詢場景的處理時(shí)間,滿足企業(yè)級(jí)應(yīng)用對(duì)查詢低時(shí)延的要求。并行查詢的基本實(shí)現(xiàn)原理是將查詢?nèi)蝿?wù)進(jìn)行切分并分發(fā)到多個(gè)CPU核上進(jìn)行計(jì)算,充分利用cpu的多核計(jì)算資源來縮短查詢時(shí)間。并行查詢的性能提升倍數(shù)理論上與CPU的核數(shù)正相關(guān),也就是說并行度越高能夠使用的CPU核數(shù)就越多,性能提升的倍數(shù)也就越高。
下圖是使用CPU多核資源并行計(jì)算一個(gè)表的count(*)過程的基本原理:表數(shù)據(jù)進(jìn)行切塊后分發(fā)給多個(gè)核進(jìn)行并行計(jì)算,每個(gè)核計(jì)算部分?jǐn)?shù)據(jù)得到一個(gè)中間count(*)結(jié)果,并在最后階段將所有中間結(jié)果進(jìn)行聚合得到最終結(jié)果。具體如下:
前提條件
云數(shù)據(jù)庫TaurusDB的引擎版本為MySQL 8.0.22及以上。
應(yīng)用場景
并行查詢適用于大部分SELECT語句,例如大表查詢、多表連接查詢、計(jì)算量較大的查詢。對(duì)于非常短的查詢,效果不太顯著。
輕分析類業(yè)務(wù)
報(bào)表查詢通常SQL復(fù)雜而且比較耗費(fèi)時(shí)間,通過并行查詢可以加速單次查詢效率。
系統(tǒng)資源相對(duì)空閑
并行查詢會(huì)使用更多的系統(tǒng)資源,只有當(dāng)系統(tǒng)的CPU較多、IO負(fù)載不高、內(nèi)存夠大的時(shí)候,才可以充分使用并行查詢來提高資源利用率和查詢效率。
數(shù)據(jù)頻繁查詢
針對(duì)數(shù)據(jù)密集型查詢,通過并行查詢,可以提高查詢處理執(zhí)行效率,減少網(wǎng)絡(luò)流量和計(jì)算節(jié)點(diǎn)的壓力。
說明:并行查詢特性當(dāng)前處于公測階段,建議在測試環(huán)境使用。
TaurusDB并行查詢特性支持場景
并行查詢支持場景
并行查詢支持以下場景:
1、支持全表掃描、索引掃描、索引范圍掃描、索引逆序掃描、索引點(diǎn)查詢、索引下推等。
2、支持單表查詢、多表JOIN、視圖view、子查詢,部分CTE查詢等。
3、支持多種JOIN算法,包括:BNL Join、BKA Join、HASH Join、Nested loop Join、Semi Join、Anti Join、outer Join等。
4、支持多種子查詢,包括:條件子查詢、scalar子查詢、部分關(guān)聯(lián)子查詢、非關(guān)聯(lián)子查詢、derived table等。
5、支持多種數(shù)據(jù)類型,包括:整型數(shù)據(jù)、字符型數(shù)據(jù)、浮點(diǎn)型數(shù)據(jù)、時(shí)間型數(shù)據(jù)等。
6、支持算術(shù)表達(dá)式計(jì)算(+、-、*、%、/、|、&),條件表達(dá)式運(yùn)算(<、<=、>、>=、<>、between/and、In等),邏輯運(yùn)算(or、and、not等),一般函數(shù)(字符函數(shù)、整型函數(shù)、時(shí)間函數(shù)等),聚合函數(shù)(count/sum/avg/min/max)等等。
說明:count聚合函數(shù)需關(guān)閉innodb_parallel_select_count才能并行執(zhí)行。
7、支持非分區(qū)表查詢、分區(qū)表單分區(qū)查詢。
8、支持排序order by、分組group by/distinct、分頁limit/offset、過濾where/having、列投影等。
9、支持UNION/UNION ALL查詢。
10、支持Explain查看并行執(zhí)行計(jì)劃多種方式,包括傳統(tǒng)Explain、Explain format=tree、Explain format=json等。
TaurusDB開啟/關(guān)閉并行查詢
方法一:通過設(shè)置系統(tǒng)參數(shù)開啟/關(guān)閉并行查詢
在管理控制臺(tái)的參數(shù)修改頁面,通過設(shè)置系統(tǒng)參數(shù),開啟和關(guān)閉并行查詢,并設(shè)置并行度。
通過全局參數(shù)force_parallel_execute來控制是否強(qiáng)制啟用并行執(zhí)行;
使用全局參數(shù)parallel_default_dop來控制使用多少線程并行執(zhí)行;
使用全局參數(shù)parallel_cost_threshold來控制當(dāng)執(zhí)行代價(jià)為多大時(shí),開啟并行執(zhí)行。
上述參數(shù)在使用過程中,隨時(shí)可以修改,無需重啟數(shù)據(jù)庫。
例如,想要強(qiáng)制開啟并行執(zhí)行,并且并發(fā)度為4,最小執(zhí)行代價(jià)為0,可參照如下進(jìn)行設(shè)置:
SET force_parallel_execute=ON
SET parallel_default_dop=4
SET parallel_cost_threshold=0
方法二:使用hint開閉/關(guān)閉并行查詢
使用hint語法可以控制單個(gè)語句是否進(jìn)行并行執(zhí)行。在系統(tǒng)默認(rèn)關(guān)閉并行執(zhí)行的情況下, 可以使用hint對(duì)特定的SQL進(jìn)行開啟。反之,也可以禁止某條SQL進(jìn)行并行執(zhí)行。
開啟并行執(zhí)行:采用下面的hint語法可以開啟并行執(zhí)行。
采用默認(rèn)的參數(shù)配置:SELECT /*+ PQ() */ … FROM …
采用默認(rèn)的參數(shù)配置,同時(shí)指定并發(fā)度為8:SELECT /*+ PQ(8) */ … FROM …
采用默認(rèn)的參數(shù)配置,同時(shí)指定并行表為t1:SELECT /*+ PQ(t1) */ … FROM …
采用默認(rèn)的參數(shù)配置,同時(shí)指定并行表為t1,并發(fā)度為8:SELECT /*+ PQ(t1 8) */ … FROM …
說明:并行查詢PQ hint緊跟著SELECT關(guān)鍵字才能生效。PQ hint的并發(fā)度參數(shù)dop正常取值范圍[1, min(parallel_max_threads, 1024)]。
dop超出正常取值范圍時(shí),并行查詢PQ不生效。
關(guān)閉并行執(zhí)行:當(dāng)并行查詢開啟時(shí),可使用"NO_PQ"的hint語法關(guān)閉單條SQL的并行執(zhí)行。
SELECT /*+ NO_PQ */ … FROM …
TaurusDB常見問題解答
云數(shù)據(jù)庫TaurusDB常見問題解答
專題內(nèi)容推薦
活動(dòng)對(duì)象:華為云電銷客戶及渠道伙伴客戶可參與消費(fèi)滿送活動(dòng),其他客戶參與前請咨詢客戶經(jīng)理
活動(dòng)時(shí)間: 2020年8月12日-2020年9月11日
活動(dòng)期間,華為云用戶通過活動(dòng)頁面購買云服務(wù),或使用上云禮包優(yōu)惠券在華為云官網(wǎng)新購云服務(wù),累計(jì)新購實(shí)付付費(fèi)金額達(dá)到一定額度,可兌換相應(yīng)的實(shí)物禮品?;顒?dòng)優(yōu)惠券可在本活動(dòng)頁面中“上云禮包”等方式獲取,在華為云官網(wǎng)直接購買(未使用年中云鉅惠活動(dòng)優(yōu)惠券)或參與其他活動(dòng)的訂單付費(fèi)金額不計(jì)入統(tǒng)計(jì)范圍內(nèi);