presto內存分配參數

假如設置最大Heap內存爲35G

需要考慮的Heap最大值因素,因爲需要給系統與其他守護進程留有空間,所以最好不要將內存設置爲機器內存大小

prestor參數

query.max-memory-per-node

每個機器上用於執行用戶任務的內存大小,比如:排序等操作,超出限制將kill

query.max-total-memory-per-node

每個節點上用於系統與用戶任務的內存大小,該參數據包括上一個參數,多出系統所用內存,比如系統分配讀寫等,超出限制將kill

query.max-memory

整個集羣可以使用的最大用戶執行內存

query.max-total-memory

整個集羣可以使用的最大的系統和用戶執行內存

memory.heap-headroom-per-node

各人理解是預保留的內存區域,用於一些非用戶查詢,有點像jvm perm(錯誤的理解)

該區域爲不監控內存區,主要保存一些輔助信息,比如幫助jvm gc回收等 

presto內存分類:通用pool,系統 pool,預留pool

通用pool主要是執行查詢

系統pool主要執行查詢的系統調用

預留pool與上面的memory.heap-headroom-per-node對應(錯誤的理解)

預留pool是爲一些大的查詢預留的內存空間,比如有很多併發查詢,佔用了大多數的空間,當有一個大的查詢它一直獲得不到

資源會將它分配預留空間,但是該空間的查詢只 能是排隊執行的

 

參數與pool的對應關係 

0.201 前 query.max-memory-per-node 代表預留pool的大小

0201後 query.max-total-memory-per-node代表預留pool的大小

0.201後系統pool被廢除,可以看到 query.max-total-memory/query.max-total-memory-per-node

來控制用戶加系統內存大小

 

所以通用pool 在最新版本 = max heap - query.max-total-memory-per-node -  memory.heap-headroom-per-node

 

  • query.max-memory-per-node = 12GB
  • query.max-total-memory-per-node =15GB
  • memory.heap-headroom-per-node = 8GB

計算通用pool=35G - 15G - 8G

假如我們確定query.max-memory 48G還需要考慮query.initial-hash-partitions 的設置

如果query.initial-hash-partitions =8那麼

48G / 8 =6G

那麼 12G/6G =2,這表示如果在hash partition的時候,現有通用pool大小可以容忍兩倍的數據傾斜。

初次察看presto相關文檔,不對之處,請大家指證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章