全部產品
Search
文件中心

AnalyticDB:績效參數調優

更新時間:Feb 05, 2024

AnalyticDB PostgreSQL版是一個開箱即用的產品,預設配置就適用大多數應用情境,但是您依然可以通過資料庫配置參數對系統進行微調,以更好的效能滿足特定的業務情境。

參數生效層級

AnalyticDB PostgreSQL的參數分為如下四個層級,部分參數只能在固定層級設定。

層級

生效範圍

設定方法

SYSTEM層級

對該執行個體的所有庫所有使用者生效。

需要提交工單,由營運人員協助修改。

DATABASE層級

對設定的資料庫的所有會話生效。

設定命令如下:

ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT };

ROLE層級

對設定的使用者的所有會話生效。

設定命令如下:

ALTER ROLE name SET parameter  { TO | = } { value | DEFAULT };

SESSION層級

對當前會話生效。

設定命令如下:

SET parameter  { TO | = } { value | DEFAULT };

目前支援提交工單修改的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_connsrds_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_segments

    acting_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越大。