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
    

    例如,具有下面配置的段服務器:

    8GB 交換空間
    128GB 內存
    vm.overcommit_ratio = 50
    8 個段數據庫
    

    (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
    

    例如,如果併發度爲40, gp_vmeme_protect_limit爲8GB,則 gp_statement_mem 爲:

    (8192MB * .9) / 40 = 184MB,每個查詢最多可以使用 184MB 內存,之後將溢出到磁盤。
    
  • gp_workfile_limit_files_per_query
    如果爲SQL查詢分配的內存不足,Greenplum數據庫會創建溢出文件(也叫工作文件)。在默認情況下,一個SQL查詢最多可以創建 100000 個溢出文件,這足以滿足大多數查詢。
    該參數決定了一個查詢最多可以創建多少個溢出文件。0 意味着沒有限制。限制溢出文件數據可以防止失控查詢破壞整個系統。
    如果分配內存不足或者出現數據傾斜,則一個SQL查詢可能產生大量溢出文件。如果超過溢出文件上限,Greenplum數據庫報告如下錯誤:

    ERROR: number of workfiles per query limit exceeded
    

    在嘗試增大gp_workfile_limit_files_per_query前,先嚐試通過修改 SQL、數據分佈策略或者內存配置以降低溢出文件個數。

  • max_connections: 最大連接數,Segment建議設置成Master的5-10倍。

參考

發佈了148 篇原創文章 · 獲贊 39 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章