すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:パフォーマンスパラメータの最適化

最終更新日:Sep 27, 2024

AnalyticDB for PostgreSQLは、ほとんどのシナリオに適用できるすぐに使用できるサービスです。 AnalyticDB for PostgreSQLのパフォーマンスを向上させ、特定のビジネス要件を満たすようにデータベースパラメーターを設定することもできます。

パラメータレベル

AnalyticDB for PostgreSQLには4つのパラメーターレベルがあります。 特定のパラメータは、特定のレベルでのみ設定できます。

レベル

有効範囲

設定方法

システムレベル

インスタンス内のすべてのデータベースのすべてのユーザー

チケットを起票し、O&M担当者にお問い合わせください。

データベースレベル

指定されたデータベース内のすべてのセッション

実行するステートメントは、次のとおりです。

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

役割レベル

指定されたユーザーのすべてのセッション

実行するステートメントは、次のとおりです。

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

セッションレベル

現在のセッション

実行するステートメントは、次のとおりです。

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

次の表に、チケットを送信して変更できるシステムレベルのパラメーターを示します。

パラメーター

デフォルト値

データ型 /単位

有効値

gp_autostats_mode

ON_NO_STATS

STRING

NONE、ON_CHANGE、およびON_NO_STATS

gp_autostats_mode_in_functions

なし

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

オンとオフ

master.rds_max_non_super_conns

500

INT

10から1000

max_stack_depth

2048

KB

2048000に100

max_statement_mem

2048000

KB

2147483647に32768

オプティマイザ

on

STRING

オンとオフ

random_page_cost

4

DOUBLE

0から1000

rds.rds_enable_aliyun_oss_endpoint

on

STRING

オンとオフ

rds.rds_enable_oss_endpoint_whitelist_check

on

STRING

オンとオフ

rds_max_super_conns

50

INT

10から100

セグメント. rds_enable_vmem_proctect

off

STRING

オンとオフ

セグメント. rds_max_non_super_conns

1000

INT

10から3000

statement_mem

2047000

KB

50から2147483647

statement_timeout

10800000

INT

0から2147483647

上記のパラメーターの詳細については、「設定パラメーター」をご参照ください。

説明

セッションレベルでパラメーターに優先順位を付け、変更が他のユーザーに影響を与えない場合にのみ、より高いレベルでパラメーターを変更することをお勧めします。

パラメータ説明

次の表に、AnalyticDB for PostgreSQLのパフォーマンス関連パラメーターを示します。

  • 接続関連のパラメータ

    パラメーター

    条件を有効にする

    依存関係

    説明

    max_connections

    インスタンスの再起動

    計算ノードのこのパラメーターの値は、コーディネーターノードのこのパラメーターの値の3〜5倍である必要があります。

    ノードとデータベースサーバー間の同時接続の最大数。 このパラメーターは、コーディネーターと計算ノードごとに個別に設定する必要があります。 max_connections値の代わりにrds_max_non_super_conns値を調整することを推奨します。 短期間の接続が非常に同時並行であるシナリオでは、rds_max_non_super_connsパラメーターを、500とmax_connectionsの間の値に変更できます。 rds_max_super_connsパラメーターはスーパーユーザーに関連しており、ほとんどの場合調整する必要はありません。

    max_prepared_トランザクション

    インスタンスの再起動

    • このパラメーターは、max_connectionsの値と同じ値に設定することを推奨します。

    • max_prepared_transactionsの値の2倍は、rds_max_non_super_conns値にrds_max_super_conns値を加えた値より大きくなければなりません。

    2フェーズコミット (2PC) 状態のトランザクション数。 このパラメーターは、max_connectionsの値と同じ値に設定することを推奨します。 同時実行性の高いシナリオでエラーが発生した場合は、この値を増やす必要があります。

    rds_max_non_super_conns

    設定のリロード

    • この値は、max_connections値未満である必要があります。

    • rds_max_non_super_conns値とrds_max_super_conns値は、max_connections値以下である必要があります。

    • 計算ノードのこのパラメーターの値は、コーディネーターノードのこのパラメーターの値の3〜5倍である必要があります。

    非スーパーユーザーが使用できる接続の最大数。

    rds_max_super_conns

    設定のリロード

    • この値は、max_connections値未満である必要があります。

    • rds_max_non_super_conns値とrds_max_super_conns値は、max_connections値以下である必要があります。

    • 計算ノードのこのパラメーターの値は、コーディネーターノードのこのパラメーターの値の3〜5倍である必要があります。

    スーパーユーザーが使用できる接続の最大数。

  • メモリ制御パラメータ

    パラメーター

    有効値 /単位

    条件を有効にする

    依存関係

    説明

    shared_buffers

    KB

    インスタンスの再起動

    ほとんどのデータが行指向のテーブルに格納されている場合は、この値をインスタンスのメモリサイズの25% か、計算ノードの場合は少し大きく設定することを推奨します。

    共有バッファーのサイズ。 このパラメーターは、コーディネーターと計算ノードごとに個別に設定する必要があります。 コーディネーターノードのキャッシュページにはデータ辞書テーブルが含まれ、コンピュートノードのキャッシュページには行指向テーブルが含まれます。 追加最適化列指向 (AOCO) テーブルは、共有バッファのサイズの影響を受けません。 ほとんどの場合、このパラメーターを変更する必要はありません。 100,000を超えるテーブルが作成されている場合は、コーディネーターノードと計算ノードに対してこの値を増やすことを推奨します。 ほとんどのデータが行指向のテーブルに格納されている場合は、計算ノードでこの値を増やすことをお勧めします。

    temp_buffers

    KB

    設定のリロード

    なし

    一時バッファーのサイズ。 一時バッファは、データベースセッションが一時テーブルにアクセスするために使用されます。 このパラメーターのデフォルト値は8 MBです。 大きな一時テーブルへのアクセスのパフォーマンスを向上させるために、特定のセッションに対してこのパラメーターを変更できます。

    gp_vmem_protect_limit

    KB

    インスタンスの再起動

    gp_vmem_protect_limit = gp_vmem/acting_primary_segments

    計算ノード上のすべてのpostgresプロセスで使用できるメモリの最大量。 単位:MB。 この値を超えるメモリサイズが必要な場合、クエリは失敗します。 このパラメーターは、プライマリおよびセカンダリ計算ノードごとに個別に設定する必要があります。

    次の式に基づいて、このパラメーターの適切な値を推定できます。

    gp_vmem = ((SWAP + RAM) - (7.5 GB + 0.05 × RAM))/1.7
    gp_vmem_protect_limit = gp_vmem/acting_primary_segments

    acting_primary_segment値は、プライマリ計算ノードの数、またはプライマリとセカンダリの計算ノードを組み合わせた数です。 クエリが失敗した場合は、この値を増やす必要があります。

    説明

    リソースキューのメモリ制限を設定する場合は、リソースキューのパラメーターを変更することを推奨します。 詳細については、「リソースキューを使用したワークロード管理」をご参照ください。

    gp_vmem_protect_segworker_cache_limit

    KB

    インスタンスの再起動

    なし

    クエリ実行プロセスの最大キャッシュ。 多数の接続またはアイドルプロセスがある場合、計算ノードからより多くのメモリを解放するために、この値を減らす必要がある場合があります。 このパラメーターは、計算ノードごとに個別に設定する必要があります。

    gp_resqueue_memory_ポリシー

    none、auto、eager_free

    設定のリロード

    なし

    AnalyticDB for PostgreSQLで使用されるメモリ管理ポリシー。 クエリプランにはいくつかのステージがあります。 このパラメーターがeager_freeに設定されている場合、AnalyticDB for PostgreSQLは、このステージの最後のステージに割り当てられたメモリを解放し、次のステージにメモリを割り当てます。 eager_free値はメモリ不足の可能性を減らしますが、パフォーマンスのオーバーヘッドが増えます。 このパラメーターがautoに設定されている場合、クエリのメモリ使用量はstatement_memとリソースキューのメモリ制限に基づいて制御されます。

    ステートメント_mem

    KB

    設定のリロード

    • このパラメーターは、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が8192 MB (8 GB) に設定されており、10% バッファを使用して最大40の同時クエリが想定されている場合、次の値を計算できます。

    (8GB × 0.9)/40 = 184 MB

    max_statement_mem

    KB

    設定のリロード

    (seghost_physical_memory)/(average_number_concurrent_queries)

    クエリに割り当てることができるメモリの最大量。 このパラメーターは、statement_memが高い値に設定されている場合、クエリ処理中に計算ノードでメモリ不足エラーを回避するのに役立ちます。 gp_resqueue_memory_policyがautoに設定されている場合、クエリのメモリ使用量はstatement_memとリソースキューのメモリ制限に基づいて制御されます。 この値は, 単一の計算ノードホストの構成を考慮して, 次の計算式で計算できます。

    (seghost_physical_memory)/(average_number_concurrent_queries)

  • ワークロード関連のパラメーター

    パラメーター

    有効値 /データ型

    条件を有効にする

    依存関係

    説明

    gp_resqueue_priority

    BOOLEAN

    インスタンスの再起動

    なし

    クエリの優先順位付けを有効にするか無効にするかを指定します。 クエリの優先順位が無効になっている場合、既存の優先順位設定はクエリ実行時に評価されません。 高いクエリパフォーマンスが必要なシナリオでは、優先度キューを無効にすることを推奨します。

    gp_resqueue_priority_cpucores_per_セグメント

    512.0に0.1

    インスタンスの再起動

    なし

    インスタンスの作成時に指定される、インスタンスの各計算ノードに割り当てられたCPUコアの数。 このパラメーターが不適切に設定されていると、CPUが十分に使用されず、クエリの優先順位が正しく機能しない可能性があります。

    gp_resqueue_priority_sweeper_interval

    500 ms ~ 15000 ms

    インスタンスの再起動

    gp_resqueue_priority

    すべてのステートメントでCPU使用率が再計算される間隔。 ステートメントが実行されているとき、そのCPUシェアは優先度とgp_resqueue_priority_cpucores_per_segmentに基づいて計算されます。 間隔が小さく、計算の頻度が高いほど、優先順位の設定によって達成される結果が良くなり、オーバーヘッドが大きくなります。