OceanBaseデータベースのパラレルクエリ(PX)のパラメータは、パラレルクエリの速度を決定します。主に並列度やEXCHANGEなどの関連パラメータが含まれます。
パラレル度パラメータ
パラレル度関連のパラメータは、主に各クエリのパラレル実行時のワーカー数を決定します。詳細は以下の表を参照してください。
| パラメータ名 | 説明 | 値の範囲 | デフォルト値 | 設定の推奨事項 |
|---|---|---|---|---|
| parallel_servers_target | キュー待機を開始する前に、クエリ要件の並列度と統計済みワーカーの合計がこの値を超えているかどうかを制御します。超えている場合は、クエリはキュー待機となり、そうでない場合はクエリは実行を続けます。 | [0, 1800] | 10(現在はCPU数に基づいて計算され、実際のサイズに準じます) | このパラメータは主に、PXシナリオにおいてパラレルクエリを準備する際、処理するための十分なワーカーがない場合に、実行を続けるかキュー待機するかを決定します。 |
| _force_parallel_query_dop | このパラメータはセッション内でクエリSQLのデフォルトの並列度を指定し、PARALLELヒントが指定されていない場合、クエリSQLの並列度はこの変数によって制御されます。 | [1, +∞] | 1 | 実際のニーズに応じてください。例えば、同一セッション内で一連のパラレルクエリSQLを実行したいが、各SQLに手動でヒントを追加したくない場合は、このパラメータの使用を推奨します。 |
| _force_parallel_dml_dop | このパラメータはセッション内でDML SQLのデフォルトの並列度を指定し、PARALLELヒントが指定されていない場合、DML SQLの並列度はこの変数によって制御されます。 | [1,+∞] | 1 | 実際のニーズに応じてください。例えば、同一セッション内で一連の並列DML SQLを実行したいが、各SQLに手動でヒントを追加したくない場合は、このパラメータの使用を推奨します。 |
パラレルパラメータの値を確認する
SHOW VARIABLES コマンドを使用して、OceanBaseデータベース内のパラレルパラメータの値を確認できます。ただし、一部のパラメータは隠れた変数であり、変更は推奨されません。
セッション変数
セッション変数 _force_parallel_query_dop と _force_parallel_dml_dop は隠れたパラメータであり、次の方法で確認できます:
-- DBA_OB_SYS_VARIABLESテーブルを使用したクエリ
SELECT * FROM oceanbase.DBA_OB_SYS_VARIABLES WHERE name LIKE '%_force_parallel%';
-- システム変数を使用したクエリ
SELECT @@_force_parallel_query_dop;
これらのクエリ方法では隠れたパラメータの値を返すことができますが、慎重に扱い、これらの隠れたパラメータを変更することは推奨されません。
SYSテナントのクエリ
sys テナントの場合、次のクエリコマンドを使用してこれらのパラレルパラメータを確認することもできます:
SELECT tenant_id, name, value
FROM oceanbase.CDB_OB_SYS_VARIABLES
WHERE name LIKE '%_force_parallel%';
EXCHANGE(Shuffle)パラメータ
EXCHANGE(Shuffle)パラメータは、主にDFO(Distributed Function Operator)間のデータ転送時のメモリ管理とデータ再分散戦略を制御するために使用されます。OceanBaseデータベースは、このデータ転送プロセスをDTL(Data Transfer Layer)モジュール内でカプセル化しています。
| パラメータ名 | 説明 | 値の範囲 | デフォルト値 | 設定の推奨事項 |
|---|---|---|---|---|
| dtl_buffer_size | EXCHANGE演算子間(つまりTransmitとReceiveの間)でデータを送信する際、各送信データのBufferサイズを制御します。つまり、データがこの値の上限に達した場合にのみ送信が行われるため、各行の転送コストを削減します。 |
[4k, 2M] | 64K | PXシナリオでは、EXCHANGE間のデータ送信はこのパラメータのサイズに依存しており、一般的にはこのパラメータを調整する必要はありません。ただし、送信回数を減らすために変更を試すことは可能ですが、通常はこの値を変更することは推奨されません。 |
パラメータの値は、以下の例のようにSHOW PARAMETERSで確認できます:
obclient> SHOW PARAMETERS LIKE '%dtl%';
期待される実行結果:
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+---------------+-----------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+---------------+-----------+
| zone1 | observer | 172.xx.xxx.xxx | 2882 | dtl_buffer_size | CAPACITY | 64K | to be removed | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | 64K | 1 |
+-------+----------+----------------+----------+-----------------+-----------+-------+---------------+----------+---------+---------+-------------------+---------------+-----------+
1 row in set
その他のパラレル関連パラメータ
| パラメータ名 | 説明 | 値の範囲 | デフォルト値 | 設定の推奨事項 |
|---|---|---|---|---|
| _enable_px_batch_rescan | NLJが分散PX RESCAN計画を生成して実行する際に、BATCH RESCANを使用するかどうかを制御します。これにより、より良いパフォーマンスを得ることができます。 | TrueまたはFalse | True | デフォルトで有効にするとパフォーマンスが向上しますが、より多くのメモリを消費します。 |
| _bloom_filter_enabled | HASH JOINシナリオでBLOOM FILTERを有効にするかどうかを制御します。 | TrueまたはFalse | True | パラレル度が1より大きい場合、デフォルトで有効になっています。HASH JOINの結合条件のフィルタリング性が低い場合、BLOOM FILTERを有効にすると追加のオーバーヘッドが発生するため、このシナリオではこの機能を無効にすることを検討できます。 |