Greenplum最佳實踐


一、最佳實踐數據庫參數部分

GP數據庫參數配置
以下配置存於文件–postgresql.conf中,僅列出一些最常用的參數。

shared_buffers:剛開始可以設置一個較小的值,比如總內存的15%,然后逐漸增加,過程中監控性能提升和swap的情況。
effective_cache_size : 這個參數告訴PostgreSQL的優化器有多少內存可以被用來緩存數據,以及幫助決定是否應該使用索引。這個數值越大,優化器使用索引的可能性也越大。 因此這個數值應該設置成shared_buffers加上可用操作系統緩存兩者的總量。通常這個數值會超過系統內存總量的50%。
work_mem: 當PostgreSQL對大表進行排序時,數據庫會按照此參數指定大小進行分片排序,將中間結果存放在臨時文件中,這些中間結果的臨時文件最終會再次合並排序,所以增加此參數可以減少臨時文件個數進而提升排序效率。當然如果設置過大,會導致swap的發生,所以設置此參數時仍需謹慎,剛開始可設定為總內存的5%。
temp_buffers: 即臨時緩沖區,擁有數據庫訪問臨時數據,GP中默認值為1M,在訪問比較到大的臨時表時,對性能提升有很大幫助。
gp_fts_probe_threadcount:  設置ftsprobe線程數,此參數建議大於等於每台服務器segments的數目。
gp_hashjoin_tuples_per_bucket: 此參數越小,hash_tables越大,可提升join性能。
gp_interconnect_setup_timeout: 此參數在負載較大的集群中,應該設置較大的值。
gp_vmem_protect_limit: 
控制了每個段數據庫為所有運行的查詢分配的內存總量。如果查詢需要的內存超過此值,則會失敗。使用下面公式確定合適的值:
(swap + (RAM * vm.overcommit_ratio)) * .9 / number_of_Segments_per_server
1
例如,具有下面配置的段服務器:
8GB 交換空間
128GB 內存
vm.overcommit_ratio = 50
8 個段數據庫
1234
(8 + (128 * .5)) * .9 / 8 = 8 GB, 則設置gp_vmem_protect_limit為 8GB:
gp_statement_mem:
服務器配置參數 gp_statement_mem 控制段數據庫上單個查詢可以使用的內存總量。如果語句需要更多內存,則會溢出數據到磁盤。用下面公式確定合適的值:
(gp_vmem_protect_limit * .9) / max_expected_concurrent_queries
1
例如,如果並發度為40, gp_vmeme_protect_limit為8GB,則 gp_statement_mem 為:
(8192MB * .9) / 40 = 184MB,每個查詢最多可以使用 184MB 內存,之后將溢出到磁盤。
1
gp_workfile_limit_files_per_query
如果為SQL查詢分配的內存不足,Greenplum數據庫會創建溢出文件(也叫工作文件)。在默認情況下,一個SQL查詢最多可以創建 100000 個溢出文件,這足以滿足大多數查詢。
該參數決定了一個查詢最多可以創建多少個溢出文件。0 意味着沒有限制。限制溢出文件數據可以防止失控查詢破壞整個系統。
如果分配內存不足或者出現數據傾斜,則一個SQL查詢可能產生大量溢出文件。如果超過溢出文件上限,Greenplum數據庫報告如下錯誤:
ERROR: number of workfiles per query limit exceeded
1
在嘗試增大gp_workfile_limit_files_per_query前,先嘗試通過修改 SQL、數據分布策略或者內存配置以降低溢出文件個數。
max_connections: 最大連接數,Segment建議設置成Master的5-10倍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM