AnalyticDB PostgreSQL版是一個開箱即用的產品,預設配置就適用大多數應用情境,但是您依然可以通過資料庫配置參數對系統進行微調,以更好的效能滿足特定的業務情境。
參數生效層級
AnalyticDB PostgreSQL的參數分為如下四個層級,部分參數只能在固定層級設定。
層級 | 生效範圍 | 設定方法 |
SYSTEM層級 | 對該執行個體的所有庫所有使用者生效。 | 需要提交工單,由營運人員協助修改。 |
DATABASE層級 | 對設定的資料庫的所有會話生效。 | 設定命令如下: |
ROLE層級 | 對設定的使用者的所有會話生效。 | 設定命令如下: |
SESSION層級 | 對當前會話生效。 | 設定命令如下: |
目前支援提交工單修改的SYSTEM層參數如下:
參數名 | 預設值 | 單位 | 取值範圍 |
gp_autostats_mode | ON_NO_STATS | STRING | [NONE|ON_CHANGE|ON_NO_STATS] |
gp_autostats_mode_in_functions | NONE | STRING | [NONE|ON_CHANGE|ON_NO_STATS] |
gp_max_slices | 50 | INT | [0~1000] |
log_rotation_size | 102400 | kB | [0~4194304] |
master.rds_enable_vmem_protect | on | STRING | [on|off] |
master.rds_max_non_super_conns | 500 | INT | [10~1000] |
max_stack_depth | 2048 | kB | [100~2048000] |
max_statement_mem | 2048000 | kB | [32768~2147483647] |
optimizer | on | STRING | [on|off] |
random_page_cost | 4 | DOUBLE | [0~1000] |
rds.rds_enable_aliyun_oss_endpoint | on | STRING | [on|off] |
rds.rds_enable_oss_endpoint_whitelist_check | on | STRING | [on|off] |
rds_max_super_conns | 50 | INT | [10~100] |
segment.rds_enable_vmem_proctect | off | STRING | [on|off] |
segment.rds_max_non_super_conns | 1000 | INT | [10~3000] |
statement_mem | 2047000 | kB | [50~2147483647] |
statement_timeout | 10800000 | INT | [0~2147483647] |
上述參數的具體介紹,請參見配置參數。
建議您優先適用SESSION層級設定參數,當確認不會對業務其他使用者產生副作用時,再設定為更進階別的參數。
參數說明
AnalyticDB PostgreSQL與效能有關的參數可以分為以下幾類:
串連相關參數
參數
生效條件
依賴關係
描述
max_connections
重啟執行個體生效
Segment節點的值需要是Master節點的3~5倍。
max_connections與資料庫伺服器並發串連的最大數量,是執行個體串連總數的硬性值,在master和segment上需要分布設定,一般不建議調整這個值,而是調整rds_max_non_super_conns,目前初始值是500,如果業務的並發短串連的情境,可以適當調大這個值,但最大不超過max_connections的值;rds_max_super_conns是super user的串連控制參數,一般也不需要調整。
max_prepared_transactions
重啟執行個體生效
推薦與max_connections一致。
max_prepared_transactions參數的值乘以2應大於rds_max_non_super_conns加rds_max_super_conns的值。
這個參數是執行個體中處於兩階段交易認可狀態的事務數,初始設定為與max_connections的大小一致,如果在高並發的情境下報錯,需要增加這個值。
rds_max_non_super_conns
Reload Config生效
應小於max_connections的值。
rds_max_non_super_conns的值與rds_max_super_conns的值的和應小於等於max_connections的值。
Segment節點的值需要是Master節點的3~5倍。
非super user使用者最多可用串連數。
rds_max_super_conns
Reload Config生效
應小於max_connections的值。
rds_max_non_super_conns的值與rds_max_super_conns的值的和應小於等於max_connections的值。
Segment節點的值需要是Master節點的3~5倍。
super user使用者最多可用串連數。
記憶體控制參數
參數
取值範圍
生效條件
依賴關係
描述
shared_buffers
KB數
重啟執行個體生效
行存為主條件下,Segment值設定為執行個體記憶體規格的25%,可適當增大。
這個參數主要是控制共用緩衝區大小,需要在Master和Segment上分別進行設定。Master上的快取頁面面主要是資料字典表,Segment上快取頁面面主要行存表,AOCS表不受共用緩衝區的影響。一般情況下不需要使用者修改這個值。如果業務建立的表較多(>10萬)考慮在Master和Segment上增加這個值;如果儲存以行存表為主,在Segment上增加這個值。
temp_buffers
KB數
Reload Config生效
無
稱之為臨時緩衝區,用於資料庫會話訪問暫存資料表資料,系統預設值為8M。可以在單獨的Session中對該參數進行設定,尤其是需要訪問比較大的暫存資料表時,將會有顯著的效能提升。
gp_vmem_protect_limit
KB數
重啟執行個體生效
gp_vmem_protect_limit = gp_vmem / acting_primary_segments
設定segment的所有postgres進程可以使用的記憶體量(以MB為單位)。如果查詢超出該限制,系統不會分配記憶體,查詢將失敗。請注意,這是本地參數,必須為系統中的每個segment(包括primary和mirror)設定。
為了防止記憶體的資源過度分派,可以按照下面的估計一個安全的gp_vmem_protect_limit值:
gp_vmem = ((SWAP + RAM) - (7.5GB + 0.05 * RAM)) / 1.7 gp_vmem_protect_limit = gp_vmem / acting_primary_segmentsacting_primary_segment 使用segments數目進行估計,保守一些可以將mirror個數也算上,如果這個值設定的過小,會導致查詢失敗,需要對這個值進行調整。
說明如需對資源隊列的記憶體進行限制,建議修改資源隊列相關參數,具體資訊,請參見使用Resource Queue(資源隊列)進行負載管理。
gp_vmem_protect_segworker_cache_limit
KB數
重啟執行個體生效
無
查詢執行器進程緩衝的限制值。具有大量串連或空閑進程的系統可能希望減少這個值以釋放segment上的更多記憶體。這是一個本地參數,必須為每個segment設定。
gp_resqueue_memory_policy
none、auto、eager_free
Reload Config生效
無
啟用AnalyticDB PostgreSQL記憶體管理的功能。一般查詢計劃被分成幾個階段,如果設定為eager_free 資料庫將在該階段結束時急速釋放分配給前一個階段的記憶體,然後將新的記憶體配置給新階段,使用這個參數會降低查詢執行階段記憶體不足的可能性,但也會帶來額外的效能開銷。當設定為auto,查詢記憶體使用量情況由statement_mem和資源隊列記憶體限制來控制。
statement_mem
KB數
Reload Config生效
gp_resqueue_memory_policy設定為auto時生效。
不超過max_statement_mem的值。
為每個查詢分配主機記憶體。使用此參數分配的記憶體量不能超過max_statement_mem或查詢確定資源隊列上的記憶體限制。當gp_resqueue_memory_policy=auto時,statement_mem和資源隊列記憶體限制了查詢記憶體的使用。
如果查詢需要額外的記憶體,則會使用磁碟上的臨時溢出檔案。
該計算可用於估計各種情況下的合理值。
( gp_vmem_protect_limit GB * 0.9 ) / max_expected_concurrent_queries將gp_vmem_protect_limit設定為 8192MB (8GB) 並假設最大40個並發查詢和10%的緩衝區。
(8GB * 0.9) / 40 = 184MB
由於gp_resqueue_memory_policy設定為eager ,預設情況下此參數並沒有實際生效。
max_statement_mem
KB數
Reload Config生效
(seghost_physical_memory) / (average_number_concurrent_queries)
設定查詢的最大記憶體限制。將statement_mem設定得太高,有助於在查詢處理期間避免segment主機上的記憶體不足的錯誤。當gp_resqueue_memory_policy=auto時, statement_mem 和資源隊列記憶體限制了控制查詢記憶體的使用。考慮到單個段主機的配置,計算該設定如下:
(seghost_physical_memory) / (average_number_concurrent_queries)
工作負載相關參數
參數
取值範圍
生效條件
依賴關係
描述
gp_resqueue_priority
Boolean
重啟執行個體生效
無
啟用或者禁用查詢優先順序。禁用此參數時,不會再查詢運行時評估現有的優先順序設定。如果業務對查詢效能要求較高,可以考慮關閉優先順序隊列。
gp_resqueue_priority_cpucores_per_segment
0.1~512.0
重啟執行個體生效
無
指定每個segment執行個體分配的CPU單元數,這個參數在執行個體建立階段就分配完成,不正確的設定可能導致CPU使用率不足或查詢優先順序不能按照設計工作。
gp_resqueue_priority_sweeper_interval
500ms~15000ms
重啟執行個體生效
gp_resqueue_priority
CPU時間片統計間隔,SQL執行時,計算它的share值(根據優先順序以及計算gp_resqueue_priority_cpucores_per_segment出來)。越小越頻繁,優先順序設定帶來的效果越好。但是overhead越大。