OceanBaseデータベースの並列クエリ(PX)のパラメータは、並列クエリの速度を決定します。主なパラメータには、並列度やEXCHANGEなどが含まれます。
パラレル度パラメータ
パラレル度関連パラメータは、主に各クエリの並列実行時のワーカー数を決定します。詳細は次の表のとおりです。
パラメータ名 |
説明 |
値の範囲 |
デフォルト値 |
設定の推奨 |
|---|---|---|---|---|
| parallel_servers_target | クエリをキューに入れる前に、チェックされるクエリ要求の並列度と統計されたWorkerの合計がこの値を超えているかどうかを制御します。この値を超えた場合、クエリはキューに入り、そうでない場合はクエリは実行を続けます。 | [0, 1800] | 10(現在はCPU数に基づいて計算され、実際のサイズが優先されます) | このパラメータは主にPXシナリオで、並列クエリを実行しようとする際に、処理するためのWorkerが十分にいない場合、実行を続けるかキュー待ちにするかを決定します。 |
| _force_parallel_query_dop | このパラメータはセッション内でクエリSQLのデフォルト並列度を指定します。PARALLELヒントが指定されていない場合、クエリSQLの並列度はこの変数によって制御されます。 | [1, +∞] | 1 | 実際のニーズに応じて。例えば、同一セッション内で一連の並列クエリSQLを実行したい場合に、各SQLに手動でHintを追加するのが面倒な場合は、このパラメータの使用を推奨します。 |
| _force_parallel_dml_dop | このパラメータはセッション内でDML SQLのデフォルト並列度を指定します。PARALLELヒントが指定されていない場合、DML SQLの並列度はこの変数によって制御されます。 | [1,+∞] | 1 | 実際のニーズに応じて。例えば、同一セッション内で一連の並列DML SQLを実行したい場合に、各SQLに手動でHintを追加するのが面倒な場合は、このパラメータの使用を推奨します。 |
パラレルパラメータの値の確認
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の間)でデータを送信する際の、1回の送信に使用するバッファサイズを制御します。データがこの上限値に達した場合にのみ送信されるため、各行の転送コストを削減できます。 |
[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を有効にすると追加のオーバーヘッドが発生するため、このシナリオではこの機能を無効にすることを検討できます。 |