Presto內(nèi)存配置是開發(fā)者很關(guān)心的核心配置:
很難給出確切的數(shù)字,因為這些數(shù)字應(yīng)該根據(jù)您的工作量來設(shè)置。所以,我能做的就是為你提供一些數(shù)字,然后你應(yīng)該試驗這些配置和你的工作量來微調(diào)它們。
假設(shè)每個節(jié)點有47G,你可以從35G的Xmx開始,因為你應(yīng)該為本機內(nèi)存留出一些開銷,并為機器上運行的操作系統(tǒng)和其他守護進程留出一些空間,如果有的話。在生產(chǎn)中,我們使用32M的G1區(qū)域大小,這也是部署文檔中記錄的值。
鑒于最大堆大小為35G,我認為您可以開始嘗試使用以下值并確定適合您的工作負載的值:
query.max-memory-per-node = 12GB
query.max-total-memory-per-node = 15GB
memory.heap-headroom-per-node = 8GB(這是作為余量/緩沖區(qū)留出的堆內(nèi)存量(例如,用于未跟蹤的分配))。
每個節(jié)點的凈空間為8G,最大總內(nèi)存為15G,每個工作站的總體池大小為35-8-15 = 12G,整個群集中的12G * 11 = 132G。當(dāng)我們確定query.max-memory(峰值全局用戶內(nèi)存限制)時,我們還會考慮散列分區(qū)計數(shù)(query.initial-hash-partitions配置,即分布式連接和聚合的分區(qū)數(shù))。由于你有11個節(jié)點,你可以設(shè)置query.initial-hash-partitions 為8,如果我們設(shè)置query.max-memory為48G,將導(dǎo)致每個節(jié)點內(nèi)存使用量大約48/8 = 6GB(如果沒有偏差,數(shù)據(jù)分布均勻),并且因為我們有query.max-memory-per-node12GB,這意味著我們允許偏斜因子為12/6 = 2(也就是說,當(dāng)數(shù)據(jù)分布不均時,我們允許任務(wù)消耗兩倍的內(nèi)存)。同樣,你一定要試驗和調(diào)整這些值,并弄清楚什么對你有用。