GBase新聞
用戶實操 | GBase 8a MPP Cluster慢SQL分析排查和優(yōu)化方法
GBase 8a MPP Cluster數(shù)據(jù)庫采用分布式大規(guī)模并行處理架構(gòu),常用于OLAP分析型場景。此類場景中通常基礎(chǔ)數(shù)據(jù)量比較大,不同SQL運行時長差異較大。不同于MYSQL等交易型數(shù)據(jù)庫,其負(fù)載多為高并發(fā)的短事務(wù)類型,慢查詢SQL任務(wù)可通過設(shè)置固定閾值來統(tǒng)一對執(zhí)行時間過長的SQL進(jìn)行記錄,分析型場景由于業(yè)務(wù)特點存在SQL正常執(zhí)行時間從幾秒鐘到幾小時都有可能,因此無法通過簡單方式來判斷SQL任務(wù)是否異常。本文總結(jié)了GBase 8a MPP Cluster數(shù)據(jù)庫中SQL運行緩慢的分析排查和優(yōu)化方法,供其他用戶參考。
排查和優(yōu)化方法
SQL任務(wù)歷史性能對比分析:
通過開啟GBase 8a的audit_log審計日志,可以連續(xù)收集周期性任務(wù)的執(zhí)行時間,通過對比相同SQL任務(wù)歷史執(zhí)行時長可以判定相同任務(wù)SQL長周期內(nèi)的執(zhí)行耗時趨勢,通過對比發(fā)現(xiàn)執(zhí)行性能異常情況,并進(jìn)行針對性的分析。如,相同SQL任務(wù)在一定周期內(nèi)執(zhí)行時間逐漸變長,則需要結(jié)合表內(nèi)數(shù)據(jù)量變化趨勢、SQL任務(wù)類型需要訪問全量數(shù)據(jù)還是只訪問增量數(shù)據(jù)等進(jìn)行分析。
執(zhí)行計劃分析:
對于性能異常的SQL,通常先通過執(zhí)行計劃分析執(zhí)行步驟是否存在可優(yōu)化的空間。GBase 8a提供的explain分布式執(zhí)行計劃,可以提供SQL任務(wù)的執(zhí)行順序和步驟,常見的執(zhí)行計劃中的問題和優(yōu)化方法包括:
避免不合理的動態(tài)重分布或者拉復(fù)制表降低數(shù)據(jù)在節(jié)點間重分布的代價;
檢查join列的字段類型,避免因字段類型不一致導(dǎo)致的數(shù)據(jù)動態(tài)重分布;
調(diào)整不合理的join順序,避免出現(xiàn)笛卡爾積導(dǎo)致中間結(jié)果集過大;
評估哈希索引的必要性,去除不必要的哈希索引;
表數(shù)據(jù)分布分析:
通常表在各節(jié)點間的數(shù)據(jù)分布會影響查詢性能,當(dāng)表數(shù)據(jù)分布在節(jié)點間出現(xiàn)嚴(yán)重的傾斜分布時,不同的節(jié)點會因處理的數(shù)據(jù)量差異較大出現(xiàn)木桶效應(yīng)。對于數(shù)據(jù)分布存在嚴(yán)重傾斜的表,可以通過調(diào)整表的分布鍵方式將數(shù)據(jù)均勻打散,常見的分布鍵選擇策略包括:
優(yōu)先考慮大表間的JOIN,盡量讓大表JOIN條件的列為Hash分布列(相關(guān)子查詢的相關(guān)JOIN也可以參考此原則),以使得大表間的JOIN可以直接下發(fā)到各節(jié)點分布式執(zhí)行;
其次考慮GROUP BY,盡量讓GROUP BY帶有Hash分布列,讓分組聚合一步完成;
當(dāng)有多個join或group列可選擇時,優(yōu)先選擇唯一值多(count(distinct)值大)的列做Hash分布列,讓數(shù)據(jù)均勻分布;
通常是等值查詢的列,并且使用的頻率很高的應(yīng)考慮建立為hash分布列;
通過詳細(xì)trace日志分析SQL任務(wù)瓶頸:
對于一些慢SQL需要詳細(xì)分析各節(jié)點的執(zhí)行日志,通過日志發(fā)現(xiàn)某個節(jié)點是否相較其他節(jié)點明顯執(zhí)行緩慢,如果存在較慢的節(jié)點則進(jìn)一步排查是什么原因?qū)е碌摹3R姷那闆r有數(shù)據(jù)傾斜、并發(fā)過高、參數(shù)設(shè)置不合理、數(shù)據(jù)分布特征等原因造成。需要根據(jù)不同的情況,通過調(diào)整表數(shù)據(jù)分布、設(shè)置合理的線程池和并行度(主要排查gbase_parallel_execution、gbase_parallel_degree以及gbase_parallel_max_thread_in_pool等參數(shù))、調(diào)整操作系統(tǒng)參數(shù)、使用hint影響具體執(zhí)行計劃等方式進(jìn)行調(diào)優(yōu)。
各節(jié)點軟硬件參數(shù)配置檢查:
排查CPU超線程、虛擬內(nèi)存、透明頁和IO調(diào)度參數(shù)等配置項,查看是否按照廠商建議進(jìn)行配置。
總結(jié)
分布式分析型數(shù)據(jù)庫由于其多節(jié)點并行的部署環(huán)境及OLAP負(fù)載類型復(fù)雜的特點,其SQL任務(wù)調(diào)優(yōu)相比傳統(tǒng)單機(jī)交易型數(shù)據(jù)庫更加復(fù)雜,需要更加系統(tǒng)的方法論指導(dǎo),本文的目的在于對日常運維工作中針對GBase 8a數(shù)據(jù)庫的SQL性能分析和優(yōu)化思路進(jìn)行總結(jié),期望對從事數(shù)據(jù)庫運維工作的讀者提供一些可以借鑒的思路和方法,達(dá)到交流思路互相學(xué)習(xí)的目的。