《Greenplum5.0 最佳實踐》 內存與資源隊列 (四)
Greenplum 內存參數的配置
如果認真配置係統參數可以很好的避免大部分內存溢出問題。
如果不能增加係統硬件資源,我們可以通過配置資源隊列來管理任務,避免內存溢出。
當段數據庫失效時,內存需求對於鏡像段來說非常重要,因為它需要
推薦如下的係統設置和數據庫內存參數設置
不要是用係統級別的大存儲頁
vm.overcommit_memory 係統級的參數設置。推薦設置為2, 它決定係統分配多少資源給進程使用。
vm.overcommit_ratio linux係統級別的參數設置。內存使用的百分比。默認設置為50.
如果這個值設置的太高,將會導致係統沒有可用的資源,這也會導致段失敗或者數據庫失敗
如果這個隻設置的太低,將會導致查詢的並發量和查詢的複雜度,可以通過減少數據庫集群的設置內存量實現。如果要增加該值,一定要記住保留部分資源留給操作係統使用。
gp_vmem_protect_limit . 段數據庫上的全部工作所能申請的最大內存由該值控製。永遠不要設置該值大於操作係統所含有的物理內存大小 (RAM)。如果設置太大,很容易引起問題,操作失敗等。如果設置的值太小,也有問題。例如,真正係統需要內存時,會被製止。查詢很可能會失敗,因為hiting 受限。但是卻可以很好的保護段數劇庫失效和節點失效的問題。
runaway_detector_activation_percent 中止失控查詢,引入到GPDB4.3.4,避免內存異常。這個參數 runaway_detector_activation_percent 係統參數控製 內存使用了 gp_vmem_protect_limit的到達某個百分比,然後去觸發中止失控查詢。這個值的默認值為90%。如果在段數據庫上,使用的內存量超過這個百分比,GPDB將會根據內存使用情況中止查詢。查詢內存使用量低於要求的百分比,將不會被中止。
statement_mem 一個段數據庫中,一條查詢使用的內存量。如果多餘該值的內存被申請,將會產生溢出文件到磁盤上。使用如下公式來確定 statement_mem 的值(vmprotect * 0.9) / max_expected_concurrent_queries
statement_mem 的默認值是125MB。例如, 一個查詢運行在DEll EMC DCA V2 係統上,使用默認值將會改變為 1GB 內存對於每一個段數據庫(8 segments * 125MB)。 在會話層麵設置
statement_mem 去完成查詢任務。這種設置任務將會降低查詢的並發性。對於集群高並發使用資源隊列來實現額外的控製,集群運行多少查詢。
gp_workfle_limit_files_per_query 這個參數用來控製磁盤溢出文件的最大數量對於每一個查詢任務。 溢出文件是在查詢需要更多的內存資源時,創建的磁盤臨時文件。當某一查詢申請的磁盤溢出文件數量超過該值時,就會導致查詢被中止。這個值默認是0,意味著對於查詢語句的溢出文件數量沒有限製,知道溢出文件數量填滿整個文件係統為止。想想很瘋狂。
gp_workfile_compress_algorithm 為溢出文件設置壓縮算法,可以避免溢出文件太大的問題,減輕I/O操作的壓力。
最後更新:2017-10-27 10:33:44