日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧

發(fā)布時間:2025/3/20 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

Presto架構(gòu)

Presto是一個分布式的查詢引擎,本身并不存儲數(shù)據(jù),但是可以接入多種數(shù)據(jù)源,并且支持跨數(shù)據(jù)源的級聯(lián)查詢。

Presto的架構(gòu)分為:

Coodinator:解析SQL語句,生成執(zhí)行計(jì)劃,分發(fā)執(zhí)行任務(wù)給Worker節(jié)點(diǎn)執(zhí)行。

Discovery Server:Worker節(jié)點(diǎn)啟動后向Discovery Server服務(wù)注冊,Coordinator從Discovery Server獲得可以正常工作的Worker節(jié)點(diǎn)。

Worker:負(fù)責(zé)執(zhí)行實(shí)際查詢?nèi)蝿?wù),訪問底層存儲系統(tǒng)。

存儲:Presto的數(shù)據(jù)可以存儲在HDFS/OBS,推薦熱數(shù)據(jù)存儲在HDFS,冷數(shù)據(jù)存儲在OBS。

內(nèi)存調(diào)優(yōu)

內(nèi)存管理原理

Presto有三種內(nèi)存池,分別為GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。

GENERAL_POOL:用于普通查詢的physical operators。GENERAL_POOL值為 總內(nèi)存(Xmx值)- 預(yù)留的(max-memory-per-node)- 系統(tǒng)的(0.4 * Xmx)。

SYSTEM_POOL:系統(tǒng)預(yù)留內(nèi)存,用于讀寫buffer,worker初始化以及執(zhí)行任務(wù)必要的內(nèi)存。大小由config.properties里的resources.reserved-system-memory指定。默認(rèn)值為JVM

max memory * 0.4。

RESERVED_POOL:大部分時間里是不參與計(jì)算的,只有當(dāng)同時滿足如下情形下,才會被使用,然后從所有查詢里獲取占用內(nèi)存最大的那個查詢,然后將該查詢放到

RESERVED_POOL

里執(zhí)行,同時注意RESERVED_POOL只能用于一個Query。大小由config.properties里的query.max-memory-per-node指定,默認(rèn)值為:JVM

max memory * 0.1。

1、GENERAL_POOL有節(jié)點(diǎn)出現(xiàn)阻塞節(jié)點(diǎn)(block node)情況,即該node內(nèi)存不

2、RESERVED_POOL沒有被使用query.max-memory:表示單個查詢在分布在所有相關(guān)節(jié)點(diǎn)上能用的內(nèi)存之和的最大值。

query.max-memory-per-node:表示單個查詢在單個節(jié)點(diǎn)上用戶內(nèi)存能用的最大值。

query.max-total-memory-per-node:表示單個查詢在單個節(jié)點(diǎn)上用戶內(nèi)存能用的最大值和系統(tǒng)內(nèi)存量。其中系統(tǒng)內(nèi)存是讀取器、寫入器和網(wǎng)絡(luò)緩沖區(qū)等在執(zhí)行期間使用的內(nèi)存。

memory.heap-headroom-per-node:這個內(nèi)存主要是第三方庫的內(nèi)存分配,無法被統(tǒng)計(jì)跟蹤,默認(rèn)值是-Xmx * 0.3

注意點(diǎn):

1、query.max-memory-per-node小于query.max-total-memory-per-node。

2、query.max-total-memory-per-node 與memory.heap-headroom-per-node 之和必須小于 jvm max memory 也就是jvm.config 中配置的-Xmx。

Presto內(nèi)存配置

內(nèi)存調(diào)優(yōu)參數(shù)

操作場景

Presto由于是完全基于內(nèi)存的計(jì)算,經(jīng)常出現(xiàn)OOM,需要調(diào)整內(nèi)存。

修改參數(shù)

常見OOM報錯

Query exceeded per-node total memory limit of xx

適當(dāng)增加query.max-total-memory-per-node。

Query exceeded distributed user memory limit of xx

適當(dāng)增加query.max-memory。

Could not communicate with the remote task. The node may have crashed or be under too much load

內(nèi)存不夠,導(dǎo)致節(jié)點(diǎn)crash,可以查看/var/log/message。

并行度

操作場景

調(diào)整線程數(shù)增大task的并發(fā)以提高效率。

修改參數(shù)

元數(shù)據(jù)緩存

操作場景

Presto支持Hive connector,元數(shù)據(jù)存儲在Hive metastore中,調(diào)整元數(shù)據(jù)緩存的相關(guān)參數(shù)可以提高訪問元數(shù)據(jù)的效率。

修改參數(shù)

總結(jié)

以上是生活随笔為你收集整理的java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。