次の方法で共有


Azure Cosmos DB for PostgreSQL のサーバー パラメーター

適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)

Azure Cosmos DB for PostgreSQL の動作に影響を与えるさまざまなサーバー パラメーターがあり、標準 PostgreSQL のものと、Azure Cosmos DB for PostgreSQL に固有のものの両方があります。 これらのパラメーターは、Azure portal でクラスターに対して設定できます。 [設定] カテゴリで、ワーカー ノードのパラメーターまたはコーディネーター ノードのパラメーターを選択します。 これらのページでは、すべてのワーカー ノードの、またはコーディネーター ノードだけの、パラメーターを設定できます。

Azure Cosmos DB for PostgreSQL のパラメーター

Note

以前のバージョンの Citus 拡張機能 を実行しているクラスターでは、以下に示すパラメーターがすべて提供されない場合があります。

全般構成

citus.use_secondary_nodes (enum)

SELECT クエリのノードを選択するときに使用するポリシーを設定します。 これが 'always' に設定されている場合、プランナーは、pg_dist_node で 'secondary' ノードロールとマークされているノードにのみクエリを実行します。

この列挙型でサポートされている値は次のとおりです。

  • never: (既定) すべての読み取りがプライマリ ノード上で実行されます。
  • always: 代わりにセカンダリ ノードに対して読み取りが実行され、挿入/更新ステートメントは無効になります。

citus.cluster_name (text)

コーディネーター ノード プランナーに、どのクラスターを調整するかを通知します。 cluster_name が設定されていると、プランナーは、そのクラスター内のワーカー ノードにのみクエリを実行します。

citus.enable_version_checks (boolean)

Azure Cosmos DB for PostgreSQL のバージョンをアップグレードするには、サーバーの再起動 (新しい共有ライブラリを選択するため) と、その後の ALTER EXTENSION UPDATE コマンドが必要です。 この両方の手順を実行しないと、エラーまたはクラッシュが発生する可能性があります。 そのため、Azure Cosmos DB for PostgreSQL ではコードと拡張機能のバージョンが一致することを検証し、一致しない場合はエラーが発生します。

この値は既定で true であり、コーディネーター上で有効です。 まれに、複雑なアップグレード プロセスでこのパラメーターを false に設定する必要があるため、チェックを無効にする必要があります。

citus.log_distributed_deadlock_detection (boolean)

分散デッドロックの検出に関連した処理をサーバー ログに記録するかどうか。 この既定値は false です。

citus.distributed_deadlock_detection_factor (floating point)

分散デッドロックを確認するまでの待ち時間を設定します。 特に、待ち時間は、この値に PostgreSQL の deadlock_timeout の設定値を掛けた値になります。 既定値は 2 です。 -1 の値を指定すると、分散デッドロックの検出が無効になります。

citus.node_connection_timeout (integer)

citus.node_connection_timeout GUC は、接続の確立を待つ最大期間 (ミリ秒単位) を設定します。 Azure Cosmos DB for PostgreSQL では、少なくとも 1 つのワーカー接続が確立される前にタイムアウトが経過した場合にエラーが発生します。 この GUC は、コーディネーターからワーカーへの接続と、ワーカー相互の接続に影響を与えます。

  • 既定値: 5 秒
  • 最小:10 ミリ秒
  • 最大: 1 時間
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;

citus.log_remote_commands (boolean)

コーディネーターがワーカー ノードに送信するすべてのコマンドをログに記録します。 次に例を示します。

-- reveal the per-shard queries behind the scenes
SET citus.log_remote_commands TO on;

-- run a query on distributed table "github_users"
SELECT count(*) FROM github_users;

出力には、コーディネーター上の 1 つの count(*) クエリのために、ワーカーで実行されている複数のクエリが表示されます。

NOTICE:  issuing SELECT count(*) AS count FROM public.github_events_102040 github_events WHERE true
DETAIL:  on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
NOTICE:  issuing SELECT count(*) AS count FROM public.github_events_102041 github_events WHERE true
DETAIL:  on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
NOTICE:  issuing SELECT count(*) AS count FROM public.github_events_102042 github_events WHERE true
DETAIL:  on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
... etc, one for each of the 32 shards

citus.show_shards_for_app_name_prefixes (テキスト)

既定では、Azure Cosmos DB for PostgreSQL は PostgreSQL から SQL クライアントに提供されるテーブルの一覧にシャードが含まれないようにします。 これは、分散テーブルごとに複数のシャードが存在し、シャードが SQL クライアントにとって邪魔になる可能性があるためです。

citus.show_shards_for_app_name_prefixes GUC を使用すると、シャードを表示したほうが望ましい一部のクライアントに対して、シャードを表示することができます。 既定値は "" です。

-- show shards to psql only (hide in other clients, like pgAdmin)

SET citus.show_shards_for_app_name_prefixes TO 'psql';

-- also accepts a comma separated list

SET citus.show_shards_for_app_name_prefixes TO 'psql,pg_dump';

シャードの非表示は、citus.override_table_visibility を使用して完全に無効にすることもできます。

citus.override_table_visibility (ブール値)

citus.show_shards_for_app_name_prefixes がアクティブかどうかを決定します。 既定値は、"true" です。 "false" に設定すると、シャードはすべてのクライアント アプリケーションに表示されます。

citus.use_citus_managed_tables (ブール値)

ワーカー ノードのクエリからローカル テーブルにアクセスすることを許可します。 有効にした場合、新しく作成されたすべてのテーブルが Citus メタデータに追加されます。 既定値は "false" です。

citus.rebalancer_by_disk_size_base_cost (整数)

by_disk_size再調整戦略を使用すると、各シャード グループは、実際のディスク サイズに追加されたバイト単位でこのコストを取得します。 この値は、シャードの一部にデータが少ない場合にバランスが悪くならないようにするために使用されます。 この前提は、空のシャードであっても、並列処理と空のシャード グループが将来拡大する可能性があるため、コストが発生する可能性が高いということです。

既定値は 100MB です。

クエリ統計

citus.stat_statements_purge_interval (integer)

メンテナンス デーモンが pg_stat_statements で不一致のレコードを citus_stat_statements から削除する頻度を設定します。 この構成値は、削除間の時間間隔 (秒単位) を設定し、既定値は 10 です。 0 の値を指定すると、削除が無効になります。

SET citus.stat_statements_purge_interval TO 5;

このパラメーターはコーディネーター上で有効であり、実行時に変更できます。

citus.stat_statements_max (integer)

citus_stat_statements に格納される行の最大数。 既定値は 50000 で、1000 ~ 10000000 の範囲の任意の値に変更できます。 各行には 140 バイトのストレージが必要なので、stat_statements_max を最大値の 10M に設定すると、1.4 GB のメモリが消費されます。

この GUC を変更しても、PostgreSQL が再起動されるまでは効果が表れません。

citus.stat_statements_track (enum)

citus_stat_statements の統計を記録するには、追加の CPU リソースが必要です。 データベースの負荷が発生している場合、管理者は citus.stat_statements_tracknone に設定することで、ステートメントの追跡を無効にすることができます。

  • all: (既定値) すべてのステートメントを追跡します。
  • none: 追跡を無効にします。

citus.stat_tenants_untracked_sample_rate

citus_stat_tenantsの新しいテナントのサンプリング レート。 レートは、 0.01.0の範囲にすることができます。 既定値 1.0 、追跡されていないテナント クエリの 100% がサンプリングされます。 これを小さい値に設定すると、既に追跡されているテナントで 100% のクエリがサンプリングされますが、現在追跡されていないテナントは指定されたレートでのみサンプリングされます。

データの読み込み

citus.multi_shard_commit_protocol (enum)

ハッシュ分散テーブルで COPY を実行するときに使用するコミット プロトコルを設定します。 個々のシャード配置では、COPY 中にエラーが発生した場合はデータが取り込まれないようにするために、この COPY はトランザクション ブロックで実行されます。 ただし、COPY はすべての配置で成功するものの、すべてのトランザクションがコミットする前に (ハードウェア) 障害が発生するという、特殊な障害事例が存在します。 このパラメーターを使用すると、次のコミット プロトコルから選択することによって、そのケースでのデータ損失を防止できます。

  • 2pc: (既定) シャード配置で COPY が実行されるトランザクションが最初に PostgreSQL の 2 フェーズ コミットを使って準備され、次にコミットされます。 失敗したコミットは、COMMIT PREPARED または ROLLBACK PREPARED を使用して、それぞれ手動で回復または中止できます。 2pc を使う場合は、すべてのワーカー上で max_prepared_transactions を (通常は max_connections と同じ値に) 増やす必要があります。
  • 1pc: シャード配置で COPY が実行されるトランザクションが 1 回でコミットされます。 COPY がすべての配置で成功した後にコミットが失敗すると、データが失われる可能性があります (まれ)。

citus.shard_replication_factor (integer)

シャードのレプリケーション係数、つまり、シャードが配置されるノードの数を設定します。既定値は 1 です。 このパラメーターは実行時に設定でき、コーディネーター上で有効です。 このパラメーターの理想的な値は、クラスターのサイズやノード障害の頻度によって異なります。 たとえば、大規模なクラスターを実行し、ノードの障害をより頻繁に観察する場合は、このレプリケーション係数を増やすことができます。

プランナーの構成

citus.local_table_join_policy (enum)

この GUC は、ローカル テーブルと分散テーブルの間で結合を行うときに Azure Cosmos DB for PostgreSQL がデータを移動する方法を決定します。 結合ポリシーをカスタマイズすると、ワーカー ノード間で送信されるデータの量を減らすのに役立ちます。

Azure Cosmos DB for PostgreSQL は、結合をサポートするために必要なローカルまたは分散テーブルのいずれかをノードに送信します。 テーブル データのコピーは"変換" と呼ばれます。 ローカル テーブルは、変換された場合、結合を実行するためにそのデータを必要とする全てのワーカーに送信されます。 分散テーブルが変換された場合は、結合をサポートするためにコーディネーター内に収集されます。 Azure Cosmos DB for PostgreSQL のプランナーは、必要な行のみ変換を行って送信します。

変換設定を表現するには、次の 4 つのモードを使用できます。

  • auto: (既定値) Azure Cosmos DB for PostgreSQL は、ローカル テーブルと分散テーブルの結合をサポートするため、すべてのローカルまたはすべての分散テーブルのどちらかを変換します。 Azure Cosmos DB for PostgreSQL は、ヒューリスティックを使って変換する方法を決定します。 分散テーブルは、一意のインデックス (主キーなど) の定数フィルターを使用して結合される場合に変換されます。 変換により、ワーカー間でのデータ移動が少なくなります。
  • never: Azure Cosmos DB for PostgreSQL は、ローカル テーブルと分散テーブルの間の結合を許可しません。
  • prefer-local: Azure Cosmos DB for PostgreSQL は、ローカル テーブルと分散テーブルの結合をサポートするため、ローカル テーブルの変換を優先します。
  • prefer-distributed: Azure Cosmos DB for PostgreSQL は、ローカル テーブルと分散テーブルの結合をサポートするため、分散テーブルの変換を優先します。 分散テーブルが大きい場合、このオプションを使用すると、ワーカー間で大量のデータが移動される可能性があります。

たとえば、citus_table が列 x によって分散された分散テーブルで、postgres_table がローカル テーブルとします。

CREATE TABLE citus_table(x int primary key, y int);
SELECT create_distributed_table('citus_table', 'x');

CREATE TABLE postgres_table(x int, y int);

-- even though the join is on primary key, there isn't a constant filter
-- hence postgres_table will be sent to worker nodes to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x);

-- there is a constant filter on a primary key, hence the filtered row
-- from the distributed table will be pulled to coordinator to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;

SET citus.local_table_join_policy to 'prefer-distributed';
-- since we prefer distributed tables, citus_table will be pulled to coordinator
-- to support the join. Note that citus_table can be huge.
SELECT * FROM citus_table JOIN postgres_table USING (x);

SET citus.local_table_join_policy to 'prefer-local';
-- even though there is a constant filter on primary key for citus_table
-- postgres_table will be sent to necessary workers because we are using 'prefer-local'.
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;

citus.limit_clause_row_fetch_count (integer)

LIMIT 句の最適化のためにタスクごとにフェッチする行数を設定します。 場合によっては、limit 句を含むクエリを選択して、結果を生成するために各タスクからすべての行をフェッチすることが必要になる場合があります。 これらの場合で、かつ近似によって意味のある結果が生成されるとき、この構成値は各シャードからフェッチする行数を設定します。 制限の近似は既定では無効であり、このパラメーターは -1 に設定されています。 この値は実行時に設定でき、コーディネーター上で有効です。

citus.count_distinct_error_rate (floating point)

Azure Cosmos DB for PostgreSQL では、postgresql-hll 拡張機能を使って count(distinct) の概数を計算できます。 この構成エントリは、count(distinct) を計算するときの望ましいエラー率を設定します。 既定値である 0.0 によって count(distinct) の近似が無効になり、1.0 では結果の精度に関する保証が得られません。 最適な結果を得るために、このパラメーターを 0.005 に設定することをお勧めします。 この値は実行時に設定でき、コーディネーター上で有効です。

citus.task_assignment_policy (enum)

Note

この GUC は、shard_replication_factor が 1 を超えている場合か、または reference_tables に対するクエリにのみ適用されます。

ワーカーにタスクを割り当てるときに使用するポリシーを設定します。 コーディネーターは、シャードの場所に基づいてワーカーにタスクを割り当てます。 この構成値は、これらの割り当てを行うときに使用するポリシーを指定します。 現在、使用できるタスク割り当てポリシーには次の 3 つがあります。

  • greedy: 最長一致ポリシーは既定値であり、ワーカーにまたがってタスクを均等に分散させることを目的にしています。
  • round-robin: ラウンドロビン ポリシーは、異なるレプリカを交互に使用するラウンドロビン方式でワーカーにタスクを割り当てます。 このポリシーでは、ワーカーの数に比べてテーブルのシャード数が少ない場合にクラスター使用率が向上します。
  • first-replica: first-replica ポリシーでは、シャードの配置 (レプリカ) の挿入順序に基づいてタスクを割り当てます。 つまり、シャードのフラグメント クエリは、そのシャードの最初のレプリカを含むワーカーに割り当てられます。 この方法では、どのシャードがどのノード上で使用されるかについての強力な保証 (つまり、より強力なメモリ常駐性の保証) が得られます。

このパラメーターは実行時に設定でき、コーディネーター上で有効です。

citus.enable_non_colocated_router_query_pushdown (ブール値)

併置されていない分散テーブルを参照するクエリに対してルーター プランナーを有効にします。

ルーター プランナーは、併置された分散テーブルを参照するクエリに対してのみ有効になります。そうしないと、シャードが同じノード上にない可能性があるためです。 このフラグを有効にすると、このようなテーブルを参照するクエリの最適化が可能になりますが、シャードを再調整したり、それらのテーブルのシャード数を変更した後にクエリが機能しない場合があります。

既定値は、off です。

中間データの転送

citus.max_intermediate_result_size (integer)

実行のためや、複雑なサブクエリのためにワーカー ノードにプッシュダウンできない CTE に対する中間結果の最大サイズ (KB 単位)。 既定値は 1 GB であり、-1 の値は制限がないことを示します。 制限を超えるクエリは取り消され、エラー メッセージを生成します。

DDL

citus.enable_schema_based_sharding

パラメーターを ON に設定すると、作成されたすべてのスキーマが既定で配布されます。 分散スキーマは、これらのスキーマで作成されたテーブルがシャード キーなしで併置された分散テーブルに変換されるように、個々のコロケーション グループに自動的に関連付けられます。 この設定は、個々のセッションに対して変更できます。

この GUC の使用例については、「マイクロサービスの設計方法を参照してください。

エグゼキューターの構成

全般

citus.all_modifications_commutative

Azure Cosmos DB for PostgreSQL は、動作の正確性を保証するため、可換法則を適用し、変更操作のための適切なロックを取得します。 たとえば、INSERT ステートメントが別の INSERT ステートメントと可換であるが、UPDATE または DELETE ステートメントとは可換でないことを前提としています。 同様に、UPDATE または DELETE ステートメントが別の UPDATE または DELETE ステートメントとは可換でないことを前提としています。 この予防措置は、UPDATE や DELETE では Azure Cosmos DB for PostgreSQL がより強力なロックを取得する必要があることを示しています。

INSERT や他の UPDATE と可換である UPDATE ステートメントがある場合は、このパラメーターを true に設定して、これらの可換性の前提を緩和できます。 このパラメーターが true に設定されている場合は、すべてのコマンドが可換であると見なされ、共有ロックを要求するため、全体的なスループットが向上する可能性があります。 このパラメーターは実行時に設定でき、コーディネーター上で有効です。

citus.remote_task_check_interval (integer)

Azure Cosmos DB for PostgreSQL が、タスク トラッカー Executor によって管理されるジョブの状態を確認する頻度を設定します。 この既定値は 10 ms です。 コーディネーターはワーカーにタスクを割り当てた後、各タスクの進行状況を定期的に確認します。 この構成値は、2 つの結果確認の間の時間間隔を設定します。 このパラメーターはコーディネーター上で有効であり、実行時に設定できます。

citus.task_executor_type (enum)

Azure Cosmos DB for PostgreSQL には、分散 SELECT クエリを実行するための 3 種類の Executor があります。 この構成パラメーターを設定することによって、目的のエグゼキューターを選択できます。 このパラメーターで許容される値は次のとおりです。

  • adaptive: 既定値。 これは、複数のシャードにまたがる集計や併置結合が必要なクエリへの高速な応答のために最適です。
  • task-tracker: タスク トラッカー エグゼキューターは、ワーカー ノードにまたがるデータのシャッフルや効率的なリソース管理を必要とする実行時間の長い、複雑なクエリに最適です。
  • real-time: (非推奨) アダプティブ エグゼキューターと同様の目的に対応しますが、柔軟性が低く、ワーカー ノードへの接続の負荷は大きくなる可能性があります。

このパラメーターは実行時に設定でき、コーディネーター上で有効です。

citus.multi_task_query_log_level (enum) {#multi_task_logging}

複数のタスクを生成する (つまり、複数のシャードに達する) すべてのクエリのログ レベルを設定します。 ログ記録はマルチテナント アプリケーションの移行中に便利です。このようなクエリに対してエラーまたは警告を表示して検索し、tenant_id フィルターを追加することができます。 このパラメーターは実行時に設定でき、コーディネーター上で有効です。 このパラメーターの既定値は 'off' です。

この列挙型でサポートされている値は次のとおりです。

  • off: 複数のタスクを生成する (つまり、複数のシャードにまたがる) すべてのクエリのログ記録を無効にします。
  • debug: DEBUG 重大度レベルでステートメントをログに記録します。
  • log: LOG 重大度レベルでステートメントをログに記録します。 ログ行には、実行された SQL クエリが含まれます。
  • notice: NOTICE 重大度レベルでステートメントをログに記録します。
  • warning: WARNING 重大度レベルでステートメントをログに記録します。
  • error: ERROR 重大度レベルでステートメントをログに記録します。

開発テスト中に error を使用し、実際の運用環境のデプロイ時に log のようなログ レベルを低くすると便利な場合があります。 log を選ぶと、データベース ログには複数タスク クエリが表示され、そのクエリ自体は "STATEMENT" の後に表示されます。

LOG:  multi-task query about to be executed
HINT:  Queries are split to multiple tasks if they have to be split into several queries on the workers.
STATEMENT:  select * from foo;
citus.propagate_set_commands (enum)

コーディネーターからワーカーに伝達される SET コマンドを決定します。 このパラメーターの既定値は [none] です。

サポートされる値は

  • none: SET コマンドは反映されません。
  • local: SET LOCAL コマンドだけが伝達されます。
citus.create_object_propagation (列挙型)

サポートされているオブジェクトについて、トランザクションでの CREATE ステートメントの動作を制御します。

複数ステートメントのトランザクション ブロックでオブジェクトが作成された場合は、作成されたオブジェクトがシャード上の後のステートメントに表示されるよう、Azure Cosmos DB for PostgreSQL によってシーケンシャル モードが切り替えられす。 ただし、シーケンシャル モードへの切り替えは必ずしも望ましいとは限りません。 ユーザーは、この動作をオーバーライドすることでパフォーマンスをトレードオフし、新規オブジェクトの作成におけるトランザクションの完全な一貫性を優先することができます。

このパラメーターの既定値は "immediate" です。

サポートされる値は

  • immediate: CREATE TYPE を試行する前に create_distributed_table のような並列操作が行われるトランザクションで、エラーを返します。
  • automatic: 分散テーブルに対する並列操作との間でトランザクションが共有される場合に、型の作成を延期します。 異なるノードにデータベース オブジェクトが存在する間に不整合が生じる可能性があります。
  • deferred: 11.0 より前の動作に戻ります。これは automatic と似ていますが、他のまれなケースで発生します。 真の下位互換性が必要な場合を除き、deferred よりも automatic を優先的に使用することをお勧めします。

この動作中の GUC の例については、型の伝達に関する記事を参照してください。

citus.enable_repartition_joins (boolean)

通常、アダプティブ エグゼキューターで再パーティション分割の結合を実行しようとすると、エラー メッセージで失敗します。 ただし、citus.enable_repartition_joins を true に設定すると、Azure Cosmos DB for PostgreSQL はその結合をタスク トラッカー Executor で実行するように一時的に切り替えることができます。 既定値は false です。

citus.enable_repartitioned_insert_select (boolean)

既定では、プッシュダウンできない INSERT INTO ... プッシュ ダウンできない SELECT ステートメントは、SELECT ステートメントから行を再パーティション分割して、挿入のためにそれらをワーカー間へ転送することを試みます。 ただし、ターゲット テーブルにシャードが多すぎる場合は、再パーティション分割がうまく機能しない可能性があります。 結果をパーティション分割する方法を決定する際に、シャード間隔を処理するオーバーヘッドが大きすぎます。 再パーティション分割は、citus.enable_repartitioned_insert_select を false に設定することで手動で無効にできます。

citus.enable_binary_protocol (boolean)

このパラメーターを true に設定すると、コーディネーター ノードは PostgreSQL のバイナリ シリアル化形式 (該当する場合) を使用し、ワーカーとのデータ転送を行うよう指示します。 一部の列型では、バイナリ シリアル化がサポートされていません。

このパラメーターを有効にすると、ワーカーが大量のデータを返す必要がある場合に、特に便利です。 たとえば、多くの行が要求された場合、行に多数の列がある場合、または postgresql-hll 拡張機能の hll などのワイド型を使用する場合などです。

既定値は true です。 falseに設定すると、すべての結果がエンコードされ、テキスト形式で転送されます。

citus.max_adaptive_executor_pool_size (integer)

Max_adaptive_executor_pool_size セッションは、現在のセッションからのワーカー接続を制限します。 この GUC は、次の場合に役立ちます。

  • 1 つのバックエンドがすべてのワーカー リソースを取得するのを防ぐ
  • 優先順位管理の提供: 低優先度セッションには低い値の max_adaptive_executor_pool_size、高優先度セッションには高い値を指定する

既定値は 16 です。

citus.executor_slow_start_interval (integer)

同じワーカー ノードへの接続を開く間の待機時間 (ミリ秒単位)。

マルチシャード クエリの個々のタスクにあまり時間がかからない場合は、1 つの (多くの場合、既にキャッシュされている) 接続で完了できます。 多くの接続が冗長に開かれるのを回避するために、Executor は構成されたミリ秒数の間、接続試行を待機します。 間隔が終了すると、次回に開くことができる接続の数が増えます。

長いクエリ (> 500 ミリ秒を要する) では、遅延が発生する場合がありますが、短いクエリの方が短時間で済みます。 既定値は 10 ミリ秒です。

citus.max_cached_conns_per_worker (integer)

各バックエンドは、ワーカーへの接続を開き、シャードを照会します。 トランザクションの終了時に、構成されている接続数が開いたままになり、後続のコマンドが高速化されます。 この値を大きくすると、マルチシャード クエリの待ち時間は減りますが、ワーカーのオーバーヘッドも増えます。

既定値は 1 です。 2 のような大きな値は、少数の同時セッションを使用するクラスターには有用かもしれませんが、それ以上大きくするのは賢明ではありません (たとえば、16 は高すぎます)。

citus.force_max_query_parallelization (boolean)

非推奨とされた、現在は存在しないリアルタイムの Executor をシミュレートします。 このパラメーターは、クエリの並列処理を最大化するために、できるだけ多くの接続を開くために使用されます。

この GUC が有効であると、Azure Cosmos DB for PostgreSQL は、アダプティブ エグゼキューターが並列分散クエリの実行中に、できるだけ多くの接続を使用するように強制します。 このオプションを有効にしないと、Executor は使用する接続数を減らすことで、クエリ実行の全体的なスループットを最適化できます。 内部的には、これを true に設定すると、タスクごとに 1 つの接続を使用する結果になります。

このパラメーターが役に立つ場面の 1 つは、最初のクエリは軽量で多くの接続を必要しないが、後続のクエリは接続数が多い方が有利であるトランザクションです。 Azure Cosmos DB for PostgreSQL は、最初のステートメントに基づいてトランザクションで使用する接続の数を決定します。これにより、GUC を使用してヒントを提供しない限り、他のクエリを調整できます。

BEGIN;
-- add this hint
SET citus.force_max_query_parallelization TO ON;

-- a lightweight query that doesn't require many connections
SELECT count(*) FROM table WHERE filter = x;

-- a query that benefits from more connections, and can obtain
-- them since we forced max parallelization above
SELECT ... very .. complex .. SQL;
COMMIT;

既定値は false です。

タスク トラッカー エグゼキューターの構成

citus.task_tracker_delay (integer)

このパラメーターは、タスク管理ラウンド間のタスク トラッカーのスリープ時間を設定し、既定値は 200 ms です。 タスク トラッカー プロセスは定期的にスリープ解除し、割り当てられているすべてのタスクを確認した後、これらのタスクをスケジュールして実行します。 その後、タスク トラッカーはこれらのタスクを再び確認する前に、一定の期間スリープ状態になります。 この構成値によって、そのスリープ期間の長さが決定されます。 このパラメーターはワーカー上で有効であり、postgresql.conf ファイルで変更する必要があります。 この構成ファイルを編集した後、ユーザーは SIGHUP シグナルを送信するか、またはサーバーを再起動してこの変更を有効にすることができます。

このパラメーターを小さくすると、管理ラウンド間の時間間隔が減るため、タスク トラッカー エグゼキューターによって発生する遅延を減少させることができます。 遅延の減少はシャード クエリが短い場合に有効であるため、それらの状態を定期的に更新します。

citus.max_assign_task_batch_size (integer)

コーディネーター上のタスク トラッカー エグゼキューターは、タスクをバッチでワーカー上のデーモンに同期的に割り当てます。 このパラメーターは、1 つのバッチで割り当てるタスクの最大数を設定します。 より大きなバッチ サイズを選択すると、タスクの割り当てが高速になります。 ただし、ワーカーの数が多い場合は、すべてのワーカーがタスクを取得するのに時間がかかる場合があります。 このパラメーターは実行時に設定でき、コーディネーター上で有効です。

citus.max_running_tasks_per_node (integer)

タスク トラッカー プロセスは、必要に応じて、割り当てられているタスクをスケジュールして実行します。 この構成値は、特定の時点で 1 つのノード上で同時に実行するタスクの最大数を設定し、既定値は 8 です。

この制限により、多数のタスクが同時にディスクにアクセスすることはなくなるため、ディスク I/O の競合を回避するために役立ちます。 クエリがメモリまたは SSD から処理されている場合は、あまり気にせず max_running_tasks_per_node を増やすことができます。

citus.partition_buffer_size (integer)

パーティション操作に使用するバッファー サイズを設定し、既定値は 8 MB です。 Azure Cosmos DB for PostgreSQL では、2 つの大きなテーブルが結合されるときに、テーブル データを複数のファイルに再パーティション分割できます。 このパーティション バッファーがいっぱいになると、再パーティション分割されたデータはディスク上のファイルにフラッシュされます。 この構成エントリは実行時に設定でき、ワーカー上で有効です。

EXPLAIN 出力

citus.explain_all_tasks (boolean)

既定では、分散クエリで EXPLAIN を実行すると、Azure Cosmos DB for PostgreSQL には 1 つの任意のタスクの出力が表示されます。 ほとんどの場合、EXPLAIN 出力はタスクによらず同様になります。 場合によっては、一部のタスクは異なる計画がなされたり、実行回数が非常に多くなることがあります。 これらの場合は、このパラメーターを有効にすると役立つことがあります。その後には、EXPLAIN 出力にはすべてのタスクが含まれます。 すべてのタスクを説明すると、EXPLAIN に時間がかかる場合があります。

citus.explain_analyze_sort_method (enum)

EXPLAIN ANALYZE の出力に含まれるタスクの並べ替え方法を決定します。 citus.explain_analyze_sort_method の既定値は execution-timeです。

サポートされる値は

  • execution-time: 実行時間によって並べ替えます。
  • taskId: タスク ID で並べ替えます。

マネージド PgBouncer パラメーター

次の マネージド PgBouncer パラメーターは、単一のノードまたはコーディネーターに対して構成できます。

パラメーター名 説明 Default
pgbouncer.default_pool_size このパラメーター値を、ユーザーとデータベースのペアごとの接続数に設定します。 295
pgbouncer.ignore_startup_parameters PgBouncer が無視できるパラメーターのコンマ区切りのリスト。 たとえば、PgBouncer で extra_float_digits パラメーターを無視させることができます。 一部のパラメーターは許可され、それ以外はすべてエラーになります。 この機能は、スタートアップ パケットで無条件に 'extra_float_digits=2' を設定する過剰な JDBC を許容するために必要です。 使用しているライブラリが pq: unsupported startup parameter: extra_float_digits などのエラーを報告する場合は、このオプションを使用します。 extra_float_digits、ssl_renegotiation_limit
pgBouncer.max_client_conn このパラメーター値を、サポートする必要がある PgBouncer へのクライアント接続の最大数に設定します。 2000
pgBouncer.min_pool_size この数を下回る場合は、プールするサーバー接続をさらに追加します。 0 (無効)
pgBouncer.pool_mode トランザクション プールについて、このパラメーター値を TRANSACTION に設定します (ほとんどのワークロードで推奨される設定です)。 TRANSACTION
pgbouncer.query_wait_timeout クエリの実行の待機に費やすことができる最大時間 (秒)。 その時間内にクエリがサーバーに割り当てられない場合、クライアントは切断されます。 20s
pgbouncer.server_idle_timeout サーバー接続が、この秒数を超えてアイドル状態になっている場合、その接続は閉じられます。 0 の場合、このタイムアウトは無効になります。 60s

PostgreSQL のパラメーター

  • DateStyle - 日付と時刻の値の表示形式を設定します
  • IntervalStyle - 間隔の値の表示形式を設定します
  • TimeZone - タイムスタンプを表示および解釈するためのタイム ゾーンを設定します
  • application_name - 統計とログで報告されるアプリケーション名を設定します
  • array_nulls - 配列への NULL 要素の入力を有効にします
  • autovacuum - 自動バキューム サブプロセスを開始します
  • autovacuum_analyze_scale_factor - 分析を開始するタプルの挿入、更新、または削除の数の、reltuples に対する割合
  • autovacuum_analyze_threshold - 分析を開始するタプルの挿入、更新、または削除の最小数
  • autovacuum_naptime - 自動バキュームを実行する間にスリープする時間
  • autovacuum_vacuum_cost_delay - 自動バキュームでのバキュームのコスト遅延 (ミリ秒単位)
  • autovacuum_vacuum_cost_limit - 自動バキュームで遅延の前に使用可能なバキューム コストの量
  • autovacuum_vacuum_scale_factor - バキュームを開始するタプルの更新または削除の数の、reltuples に対する割合
  • autovacuum_vacuum_threshold - バキュームを開始するタプルの更新または削除の最小数
  • autovacuum_work_mem - 各自動バキューム ワーカー プロセスで使用される最大メモリを設定します
  • backend_flush_after - それを超えると以前に実行された書き込みがディスクにフラッシュされるようになるページ数
  • backslash_quote - 文字列リテラルで "'" が許可されるかどうかを設定します
  • bgwriter_delay - ラウンド間のバックグラウンド ライターのスリープ時間
  • bgwriter_flush_after - それを超えると以前に実行された書き込みがディスクにフラッシュされるようになるページ数
  • bgwriter_lru_maxpages - バックグラウンド ライターがラウンドごとにフラッシュする LRU ページの最大数
  • bgwriter_lru_multiplier - ラウンドごとに解放される平均バッファー使用量の倍数
  • bytea_output - bytea の出力形式を設定します
  • check_function_bodies - CREATE FUNCTION の間に関数本体をチェックします
  • checkpoint_completion_target - チェックポイントの間にダーティ バッファーのフラッシュに費やされた時間 (チェックポイント間隔に対する割合)
  • checkpoint_timeout - 自動 WAL チェックポイントの間隔の最大時間を設定します
  • checkpoint_warning - チェックポイント セグメントがこれより頻繁に入力された場合、警告を有効にします
  • client_encoding - クライアントの文字セットのエンコードを設定します
  • client_min_messages - クライアントに送信されるメッセージ レベルを設定します
  • commit_delay - トランザクションのコミットからディスクへの WAL のフラッシュまでの遅延 (マイクロ秒) を設定します
  • commit_siblings - commit_delay が実行されるようになる前の、同時に開かれているトランザクションの最小数を設定します
  • constraint_exclusion - クエリを最適化するためにプランナーで制約を使用できるようにします
  • cpu_index_tuple_cost - インデックス スキャン中の各インデックス エントリの処理コストの、プランナーによる推定値を設定します
  • cpu_operator_cost - 演算子または関数の各呼び出しの処理コストの、プランナーによる推定値を設定します
  • cpu_tuple_cost - 各タプル (行) の処理コストの、プランナーによる推定値設定します
  • cursor_tuple_fraction - 取得されるカーソルの行の割合の、プランナーによる推定値を設定します
  • deadlock_timeout - デッドロックを確認する前にロックを待機する時間を設定します (ミリ秒単位)
  • debug_pretty_print - 解析およびプランのツリーの表示をインデントします
  • debug_print_parse - 各クエリの解析ツリーをログに記録します
  • debug_print_plan - 各クエリの実行プランをログに記録します
  • debug_print_rewritten - 各クエリの書き換えられた解析ツリーをログに記録します
  • default_statistics_target - 既定の統計ターゲットを設定します
  • default_tablespace - テーブルとインデックスを作成する既定のテーブルスペースを設定します
  • default_text_search_config - 既定のテキスト検索構成を設定します
  • default_transaction_deferrable - 新しいトランザクションの既定の遅延可能状態を設定します
  • default_transaction_isolation - 各新規トランザクションのトランザクション分離レベルを設定します
  • default_transaction_read_only - 新しいトランザクションの既定の読み取り専用状態を設定します
  • default_with_oids - 既定で OID を使用して新しいテーブルを作成します
  • effective_cache_size - ディスク キャッシュのサイズに関するプランナーによる想定を設定します
  • enable_bitmapscan - プランナーによるビットマップ スキャン プランの使用を有効にします
  • enable_gathermerge - プランナーによる収集マージ プランの使用を有効にします
  • enable_hashagg - プランナーによるハッシュ済み集計プランの使用を有効にします
  • enable_hashjoin - プランナーによるハッシュ結合プランの使用を有効にします
  • enable_indexonlyscan - プランナーによるインデックスのみのスキャン プランの使用を有効にします
  • enable_indexscan - プランナーによるインデックス スキャン プランの使用を有効にします
  • enable_material - プランナーによる具体化の使用を有効にします
  • enable_mergejoin - プランナーによるマージ結合プランの使用を有効にします
  • enable_nestloop - プランナーによる入れ子になったループ結合プランの使用を有効にします
  • enable_seqscan - プランナーによる順次スキャン プランの使用を有効にします
  • enable_sort - プランナーによる明示的な並べ替え手順の使用を有効にします
  • enable_tidscan - プランナーによる TID スキャン プランの使用を有効にします
  • escape_string_warning - 通常の文字列リテラルにおける円記号のエスケープに関して警告します
  • exit_on_error - エラー発生時にセッションを終了します
  • extra_float_digits - 浮動小数点値に対して表示される桁数を設定します
  • force_parallel_mode - 並列クエリ機能を強制的に使用します
  • from_collapse_limit - それを超えるとサブクエリが折りたたまれない FROM リストのサイズを設定します
  • geqo -遺伝的クエリの最適化を有効にします
  • geqo_effort - GEQO: 他の GEQO パラメーターの既定値を設定するために処理が使用されます
  • geqo_generations - GEQO: アルゴリズムの反復の回数
  • geqo_pool_size - GEQO: 母集団内の個人の数
  • geqo_seed - GEQO: ランダム パス選択のためのシード
  • geqo_selection_bias - GEQO: 母集団内の選択圧
  • geqo_threshold - それを超えると GEQO が使用される、FROM 項目数のしきい値を設定します
  • gin_fuzzy_search_limit - GIN による完全検索に対して許可される最大の結果を設定します
  • gin_pending_list_limit - GIN インデックスに対する保留中リストの最大サイズを設定します
  • idle_in_transaction_session_timeout - アイドル状態のトランザクションの最大許容期間を設定します
  • join_collapse_limit - それを超えると JOIN コンストラクトがフラット化されない FROM リストのサイズを設定します
  • lc_monetary - 通貨金額の書式設定に使用するロケールを設定します
  • lc_numeric - 数値の書式設定に使用するロケールを設定します
  • lo_compat_privileges - 大きなオブジェクトでの特権チェックに対して下位互換性モードを有効にします
  • lock_timeout - ロックに対する待機の最大許容期間 (ミリ秒単位) を設定します。 0 を指定するとオフになります
  • log_autovacuum_min_duration - それを超えると自動バキューム アクションがログに記録される、最小実行時間を設定します
  • log_connections - 成功した各接続をログに記録します
  • log_destination - サーバー ログ出力の出力先を設定します
  • log_disconnections - セッションの終了を、実行時間も含めてログに記録します
  • log_duration - 完了した各 SQL ステートメントの実行時間をログに記録します
  • log_error_verbosity - ログに記録されるメッセージの詳細度を設定します
  • log_lock_waits - 長いロック待機をログに記録します
  • log_min_duration_statement - それを超えるとステートメントがログに記録される、最小実行時間 (ミリ秒単位) を設定します。 -1 を指定すると、ステートメント実行時間のログ記録は無効になります
  • log_min_error_statement - このレベル以上のエラーを生成したすべてのステートメントを、ログに記録します
  • log_min_messages - ログに記録されるメッセージ レベルを設定します
  • log_replication_commands - 各レプリケーション コマンドをログに記録します
  • log_statement - ログに記録されるステートメントの種類を設定します
  • log_statement_stats - 各クエリについて、累積パフォーマンス統計情報をサーバー ログに書き込みます
  • log_temp_files - このキロバイト数より大きい一時ファイルの使用をログに記録します
  • maintenance_work_mem - メンテナンス操作に使用される最大メモリを設定します
  • max_parallel_workers - 一度にアクティブにすることができる並列ワーカーの最大数を設定します
  • max_parallel_workers_per_gather - Executor ノードあたりの並列プロセスの最大数を設定します
  • max_pred_locks_per_page - 述語ロックされるタプルの、ページあたりの最大数を設定します
  • max_pred_locks_per_relation - 述語ロックされるページとタプルの、リレーションあたりの最大数を設定します
  • max_standby_archive_delay - アーカイブされた WAL データがホット スタンバイ サーバーで処理されているときの、それを超えるとクエリが取り消される最大遅延時間を設定します
  • max_standby_streaming_delay - ストリーミングされた WAL データがホット スタンバイ サーバーで処理されているときの、それを超えるとクエリが取り消される最大遅延時間を設定します
  • max_sync_workers_per_subscription - サブスクリプションあたりのテーブル同期ワーカーの最大数
  • max_wal_size - チェックポイントがトリガーされる WAL サイズを設定します
  • min_parallel_index_scan_size - 並列スキャンに対するインデックス データの最小量を設定します
  • min_wal_size - WAL を圧縮する最小サイズを設定します
  • operator_precedence_warning - PostgreSQL 9.4 以降に意味が変更されたコンストラクトに対して警告を生成します
  • parallel_setup_cost - 並列クエリに対するワーカー プロセスの起動コストのプランナーによる推定値を設定します
  • parallel_tuple_cost - ワーカーからメイン バックエンドに各タプル (行) を渡すコストのプランナーの見積もりを設定します
  • pg_stat_statements.save - 異なるサーバー シャットダウンにまたがって pg_stat_statements の統計情報を保存します
  • pg_stat_statements.track - pg_stat_statements で追跡するステートメントを選択します
  • pg_stat_statements.track_utility - pg_stat_statements でユーティリティ コマンドを追跡するかどうかを選択します
  • quote_all_identifiers - SQL フラグメントを生成するとき、すべての識別子を引用符で囲みます
  • random_page_cost - 順不同でフェッチされたディスク ページのコストのプランナーによる推定値を設定します
  • row_security - 行のセキュリティを有効にします
  • search_path - スキーマで修飾されていない名前に対するスキーマ検索順序を設定します
  • seq_page_cost - 順番にフェッチされたディスク ページのコストのプランナーによる推定値を設定します
  • session_replication_role - トリガーと書き換え規則に対するセッションの動作を設定します
  • standard_conforming_strings - "..." 文字列で円記号が文字どおりに処理されるようにします
  • statement_timeout - ステートメントの最大許容期間 (ミリ秒単位) を設定します。 0 を指定するとオフになります
  • synchronize_seqscans - 同期順次スキャンを有効にします
  • synchronous_commit - 現在のトランザクションの同期レベルを設定します
  • tcp_keepalives_count - TCP keepalive の再送信の最大数
  • tcp_keepalives_idle - TCP keepalive の発行間隔の時間
  • tcp_keepalives_interval - TCP keepalive の再送信間隔の時間
  • temp_buffers - 各データベース セッションで使用される一時バッファーの最大数を設定します
  • temp_tablespaces - 一時テーブルと並べ替えファイルに使用するテーブルスペースを設定します
  • track_activities - 実行しているコマンドに関する情報を収集します
  • track_counts - データベース アクティビティに関する統計情報を収集します
  • track_functions - データベース アクティビティに関する関数レベルの統計情報を収集します
  • track_io_timing - データベース I/O アクティビティに関するタイミング統計情報を収集します
  • transform_null_equals - "expr=NULL" を "expr IS NULL" として処理します
  • vacuum_cost_delay - バキュームのコスト遅延 (ミリ秒単位)
  • vacuum_cost_limit - 遅延の前に使用可能なバキューム コストの量
  • vacuum_cost_page_dirty - バキュームによってダーティになったページのバキューム コスト
  • vacuum_cost_page_hit - バッファー キャッシュで見つかったページのバキューム コスト
  • vacuum_cost_page_miss - バッファー キャッシュで見つからなかったページのバキューム コスト
  • vacuum_defer_cleanup_age - VACUUM と HOT のクリーンアップを遅延する必要があるトランザクションの数 (ある場合)
  • vacuum_freeze_min_age - VACUUM でテーブルの行を凍結する必要がある最小経過時間
  • vacuum_freeze_table_age - タプルを凍結するために VACUUM でテーブル全体をスキャンする必要がある経過時間
  • vacuum_multixact_freeze_min_age - VACUUM でテーブルの行の MultiXactId を凍結する必要がある最小経過時間
  • vacuum_multixact_freeze_table_age - タプルを凍結するために VACUUM でテーブル全体をスキャンする必要がある Multixact の経過時間
  • wal_receiver_status_interval - プライマリに対する WAL レシーバーの状態レポートの最大間隔を設定します
  • wal_writer_delay - WAL ライターで実行される WAL フラッシュの間の時間
  • wal_writer_flush_after - フラッシュをトリガーする、WAL ライターによって書き込まれた WAL の量
  • work_mem - それを超えると一時ディスク ファイルへの書き込みが行われる、内部並べ替え操作とハッシュ テーブルによって使用されたメモリの量を設定します
  • xmlbinary - バイナリ値を XML でエンコードする方法を設定します
  • xmloption - 暗黙的な解析およびシリアル化の操作で、XML データをドキュメントまたはコンテンツのフラグメントと見なすかどうかを設定します

次の手順

  • サーバー パラメーター以外の別の形式の構成として、クラスターにはリソースの構成オプションがあります。
  • 基になる PostgreSQL データにも構成パラメーターがあります。