您的位置:  首頁 > 技術雜談 > 正文

【高手問答匯總】——聊聊 Apache Doris 的性能優化實戰技巧

2022-01-29 12:00 https://my.oschina.net/u/4855753/blog/5420300 OSC噠噠 次閱讀 條評論

?隨著 Apache Doris 在越來越多的企業中得到落地和應用,越來越多用戶開始關注如何在海量數據下對Doris的查詢性能進行優化。有哪些性能優化的小技巧?如何降低查詢耗時?數據模型和分區分桶策略該如何設計?針對慢查詢該如何進行分析及優化?

OSCHINA 本期高手問答 1月18日-1月24日,來自百度的資深研發工程師、Apache Doris PPMC 繆翎,與大家一起探討 Apache Doris 性能優化實戰技巧,包括但不限于:

  • 慢查詢定位、Profile 解讀及SQL優化;
  • 數據模型、索引及分區分桶策略設計;
  • 物化視圖及Rollup使用技巧;
  • Doris查詢優化器解讀;

嘉賓介紹

繆翎,百度資深研發工程師、Apache Doris PPMC,專注于 Apache Doris 查詢引擎的設計和研發,在數據庫查詢引擎、查詢優化器方向有豐富的研究和實踐經驗。

?


問答匯總

問:請教一個具體場景的問題,在 Apache Doris 中,如果表按天分區,每天大約 2000 至 3000 萬數據量,通常按照業務字段查詢最近 30 天的明細信息。如何設計能支持更多的并發查詢呢?

答:如果是明細查詢,建議利用前綴索引、分桶分區裁剪以及 Bitmap 索引這類的優化策略。

?

問:進一步了解下,如果是 Uniq 數據模型,在查詢的過程中存在對數據的 update 操作,那么對查詢會有哪些影響呢?

答:update 操作可以,如果 update 的操作頻率和導入占比很小,就不會對查詢有影響。

?

問:

1. 開源 Doris 和 Clickhouse 之間的優勢和劣勢是什么?

2. Doris 在多線程設計上,有沒有使用什么設計模式?

3. Doris 入門門檻高嗎?超過多大的數據量比較合適使用 Doris ?哪些場景下特別適合doris數據庫的發揮優勢?哪些場景下 Doris 的性能不好?

答:Doris 是 MPP 架構的數據庫,這點是和 Clickhouse 從架構上有本質的不同。Doris 在 多表 Join 和分布式管理上更有優勢,Clickhouse 單機性能突出。不過我們的向量化引擎也馬上就能和大家見面了,性能上可以期待一下。

Doris 入門門檻不高,G-TB的數據量都適合使用。Doris 因為沒有其他依賴,所以運維會方便一些。 場景方面,當然是面向分析的 OLAP 場景。OLTP 場景,比如 qps 上萬的點查這類以及頻繁的 update/delete的場景并不適合 Doris。

?

問: Doris 集群 不定期的出現某個 BE 節點直接掛掉的情況,每次掛掉的 BE 節點并不一樣。查看監控看機器 Load 比較高(主要是磁盤IO write高)怎么排查這個問題,怎么知道這臺機器上在做什么,有什么命令可以知道。

答:BE 掛掉最常見的兩種情況:

1. oom 被系統 Kill,通過 dmesg 方式排查,并且結合使用方式確定 導入還是查詢導致的內存使用量過大,需要優化使用方式。

2. be core 了,通過 core dump 方式找到 core 棧,core 棧就可以看到是哪部分行為導致的 BE 掛掉。并且在 Issue 里面搜索,看是否是 Doris 舊版本已知問題。每次不一樣節點,那就要逐個分析,可能雖然節點不一樣但原因都一樣。

?

問:core dump 這個文件存放在哪里的?

答:core dump文件存放地址可以參考鏈接 https://www.jianshu.com/p/60a5df15093c

?

問:

1:在做 100-200 個相同 sql 并發測試時,總是越往后面的查詢,尤其是做group by的時候,看 profile越慢,好像哪里卡住了似的,這個應該怎么定位是哪里的問題?

2: 通過 Broker Load 導入數據時,總偶然碰到查詢超時,而且這個問題是必現,我怎么定位問題,還請給點指點。

答:

1. 這種 qps 性能分析問題,主要工具是 pprof ,看看 CPU 集中耗時在哪里。

2. 導入過程中的查詢超時,建議先看監控,grafana 上的數據。比如是否導入占用了過多的 IO或者 cpu 等,導致了相互影響,再逐步根據 pprof + 代碼分析。

?

問:請教下 Doris 集群規模為 6個 BE節點,在聚合模型下用天 Date做時間分區、每天數據近2億行,發現 select max(date) 性能不佳(接近10秒),看了下執行計劃發現全表掃描了,這樣設計的主要考慮是什么呢?

答:確實,如果對 Range 分區字段求 Max 或者 Min 等,邏輯上可以只讀最大分區數據。Doris 沒對這種特殊場景做優化,所以是全表掃描。需要增加 Where 條件從而匹配到分區分桶裁剪,才能減少數據量。比如這樣寫 select max(date) from table where date >xxx。分區字段和索引字段需要出現在 Where 條件中效果最好。

?

問:想問一下,關于性能優化這方面,與數據類型是否有什么關聯,各種數據源中的表聯合查詢的時候,對于復雜類型的性能優化是從哪方面著手的?

答:和數據類型關系還是很大的。比如 Int 類型的性能就會比 String 要好。復雜類型的性能優化我舉個 Bitmap 的例子。Bitmap 的聚合函數在 Bitmap 分布相對稠密情況下,會比稀疏的要性能高不少。

?

問:對于聚合模型, MODIFY COLUMN 某一個已經存在的列, 從類型 BIGINT 變更為 VARCHAR , 該表按每天分區,每天數據量 1億+,發現該表這一列歷史數據過多,一直處于 SCHEMA_CHANGE【 state is not NORMAL】 狀態 (大概5小時),導致后續其他的增加列,增加動態分區都不斷失敗重試,直到表恢復 NORMAL 狀態才成功。這種情況有什么建議嗎

答:同一時間單個表只能做一個 schema change 操作。所以做第一個 schema change 的時候后面增加列和增加分區的操作都被禁止了。schema change 的時間過長主要原因是表數據量大導致的。對于這種大表的表結構變更最好是等到業務不太忙的時候,比如半夜。再者,如果需要多次 schema change 建議合并為一次。

?

問:doris 后續會添加對復雜類型 Array、Map、Struct 的支持嗎?Doris On ES 這個拓展功能后期會進一步優化嗎?

答:會支持,目前正在開發 Array 、后面還會增加對 List / Map 等復雜類型的支持。Doris On ES 后續也會有優化,例如聚合下推、讀寫統一、分區裁剪等。

?

問:2021 的 Roadmap 提到會落地向量化引擎,具體什么時間能發行呢,向量化引擎和目前查詢相比,查詢效率大概能提升多少倍呢?

答:可以看下之前發布文章?https://my.oschina.net/u/4021972/blog/5393281

這個月底或下月初就會發布新版向量化執行引擎

?

問:多表關聯的物化視圖有計劃嗎?

答:有計劃,可以關注下我們在 GitHub 上發布的 2022 年 RoadMap?https://github.com/apache/incubator-doris/issues/7502

?

問:請問高吞吐量的即席查詢實時性如何,比如1張1億條數據的表,查出200萬條數據,大約需要多少毫秒?

答:這個差異可能會非常大,需要結合建表語句、查詢 SQL 、機器配置、集群規模等多方面因素綜合來看。在 Doris 官網上基于 Star-Schema-Benchmark 標準測試數據集做過性能測試,可以參考一下?https://doris.apache.org/zh-CN/benchmark/star-schema-benchmark.html#

?

問:后續會有 GO 語言版嗎?

答:目前 Doris 還只支持 Java(FE)和 C++(BE)開發,暫時沒有GO語言版的計劃。

?

問:Doris 現在是否支持修改列的名稱?

答:目前不支持修改列名,可以看下官網上的 FAQ-11 ?https://doris.apache.org/zh-CN/faq/faq.html

因為一些歷史原因,目前列名稱是直接寫入到數據文件中的。Doris 在查詢時,也是通過類名查找到對應的列的。所以修改列名不僅是簡單的元數據修改,還會涉及到數據的重寫,是一個非常重的操作。后續可能通過一些兼容手段來支持輕量化的列名修改操作。

?

問:您好,想要咨詢一下關于物聯網時序數據這種場景下是否適合?

答:之前也有社區用戶使用 Doris 應用在時序場景的,主要瓶頸在寫入頻率,不建議特別高頻的寫入。

?

問:接口性能優化都有哪些好的方案

答:首先要看你的情況是提升 QPS 還是提升單個慢查詢。

先說慢查詢:

1. 打開 Profile 觀察慢查詢主要的性能瓶

2. 梳理 Doris 的常見優化,比如 Join Reorder 、Runtime Filter、謂詞下推等等需要手動開啟的優化策略,并觀察作用。

3. 從數據模型入手,比如是否存在數據版本過多、數據模型和列類型設計不合理等等問題。

?

問:Doris 有沒有配置參數說明文檔以及一些性能優化方面的調參建議。譬如影響數據導入,查詢,合并參數指導,方便小白入門

答:最直觀的就是官方文檔,詳細的話可以期待一下即將出版的書 ~

?

問:請問 String 類型在使用上存在 Bug ,后續有在完善嗎,預計哪個版本會比較穩定呢?

答:String 是今年新加入的功能,在功能和性能方面還在改善中。今年上半年會持續對 String 進行優化,如果有 String 方面的使用問題,歡迎給 Apache Doris 開發者郵件組發郵件:dev@doris.apache.org

?

問:對于 Doris 的編碼質量,后續有沒有策略或者計劃,提升產品質量?

答:開源 Doris 目前在快速迭代中,為了保證穩定性,我們正在準備將測試框架開源給社區。

?

問:如果需要把 MySQL、Elastic Search 這種數據批量導入到 Doris ,有沒有推薦的工具使用?用什么方式比較好遷移數據到 Doirs 使用?

答:MySQL 可以存量用csv + stream load,增量用 Binlog Load 功能,可參考文檔:

https://doris.apache.org/zh-CN/administrator-guide/load-data/binlog-load-manual.html

ES 的話 Doris 本身就支持直接讀取 ES 外表,并不一定非要導入 Doris。

?

問:關于 BE 源碼調試有沒有什么好的建議,如果用 Mac 或 Windows 操作系統的電腦,一般怎么進行調試?

答:如果是 Mac 或者 Windows 電腦的話,需要借用 Docker,在 Docker 里面啟動 BE 并且 gdb 調試。

?

問:Doris擴容方便么?節點有無狀態?

答:節點分為 FE 和 BE 兩類, FE 節點是管控節點、BE 是計算和存儲節點,擴容比較簡單,往往只需要擴展 BE 節點即可,支持在線擴縮容,擴容期間正常查詢不受影響。

?

問:Doris 和 Elastic Search 區別在哪里?還有對于企業想從 ES 切換到這個,有什么成本或者值得注意的地方,謝謝。

答:Doris 跟 ES 稍微有些差異,Doris 是 MPP 數據庫,ES 是搜索引擎。Doris 的 SQL 更加友好、支持標準 SQL ,分布式比 ES 更完備。而全文檢索、任意列更新、分詞等 ES 特性目前 Doris 還不支持。如果同時在使用 Doris 和 ES 的話,可以考慮 Doris On ES 方案。

?

問:請問 Doris 有沒有計劃增加一個"自增函數"?或者是目前的 sequence 特性(

https://doris.apache.org/zh-CN/administrator-guide/load-data/sequence-column-manual.html大體也能達到自增列的效果,但它僅限 Uniq 數據模型, 有沒有計劃將其推廣到非聚合類型的列上去,比如 Aggregate 表的 Key 列、 Duplicate 表的任意列?

答:目前自增列僅限 Uniq 表,后續計劃可以到我們的 2022 Roadmap 中提出,我們會評估可行性的。Https://github.com/apache/incubator-doris/issues/7502

?

問:我們最近在做響應治理:不同維度的查詢會對性能有不同的影響,比如 1 億數據的場景下,數據權限的條件每個人都不一樣,很多數據無法提前預聚合,此時 IO 會成為高性能的最大瓶頸,請問 Doris 在這方面有什么比較好的實踐?

答:建議使用明細模型 + 物化視圖的方式,保留明細的同時,也能有預聚合的數據,而且目前 Doris 的物化視圖是可以保證基礎表與物化視圖表數據的強一致性。

?

問:老師能不能出一些 Doris 數據庫的源碼分析文章,如果想從事數據庫方面的開發,需要學習哪些內容,希望能推薦一些書籍

答:分析源碼的話可以去看下我們上傳在B站的視頻,可以關注 ApacheDoris 官方微信公眾號下載課件。

書籍的話推薦以下兩本:《Designing Data-Intensive Applications》(中文版叫數據密集型應用系統設計,建議看英文版)和《Architecture of a Database System》

?

問:請教一下分桶的優化技巧

答:數據分桶主要是為了分桶裁剪,并且避免數據傾斜。所以首先,最好選用像 id,uuid 這種不容易產生數據傾斜,且分散廣的列作為分桶列。同時可以選擇查詢的 Where 條件列作為分桶列,來更好的減少讀取的數據量,提升查詢性能。

?

問:MySQL 業務庫是分表的,如何通過 Binlog Load 把 MySQL 多表數據實時同步到 Doris 中一張表,對于這種場景有什么建議么?

答:目前 Binlog Load 還不支持多張 MySQL 表同步到一張 Doris 表,后續這塊我們會優化。

?

問:目前是否支持部分列更新的功能?

答:目前部分列更新比較局限,只支持在 Agg 模型上對 Value 列進行 replace_if_not_null 的值替換。

?

問:目前我們已經在使用doris,所以很希望知道 Doris 后續的一些計劃和時間節點,我們好安排自己的計劃。

總體開發計劃我們發布在GitHub上了,歡迎關注。最近有兩個重要的時間點:

  1. 1月底或2月初,我們會發布 Apache Doris 1.0 版本的 beta 版本,主要包含完整的向量化執行引擎、Manager 可視化運維平臺、Hive 外表、Lateral View、SeaTunnel Connector 等功能,正式 Release 應該在2月。
  2. 3月份我們將會支持 Array 數組類型、基于對象存儲的冷熱數據分離、內存管理優化、Iceberg集成等功能。

高手問答欄目查看:主題 高手問答 - OSCHINA - 中文開源技術交流社區

展開閱讀全文
  • 0
    感動
  • 0
    路過
  • 0
    高興
  • 0
    難過
  • 0
    搞笑
  • 0
    無聊
  • 0
    憤怒
  • 0
    同情
熱度排行
友情鏈接
18禁高潮出水呻吟娇喘mp3,日本熟妇乱人伦A片免费高清,成人午夜精品无码区,狠狠色噜噜色狠狠狠综合久久,麻豆一区二区99久久久久,年轻的妈妈4,少妇被又大又粗又爽毛片,护士张开腿让我爽了一夜,男男互攻互受h啪肉np文,你好神枪手电视剧免费观看啊,97人妻一区二区精品免费,久久久婷婷五月亚洲97号色,freegaysexvideos男男中国,国产精品国产三级国av麻豆,国产精品又黄又爽又色无遮挡网站,亚洲av无码一区二区三区网站,亚洲国产精品久久久久蜜桃,国产真人无码作爱视频免费,国产成人精品亚洲一区二区三区,亚洲欧洲日产最新,老司机带带我精彩免费,国产成人久久精品激情,日本最新av免费一区二区三区,边摸边吃奶又黄又激烈视频
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>