OceanBaseデータベースのパラレルクエリ(PX)のパラメータ(変数または構成パラメータ)は、パラレルクエリの速度を決定し、主に並列度やEXCHANGEなどの関連パラメータが含まれます。
並列度変数
並列度関連変数は、主に各クエリの同時実行時のWorker数を決定します。詳細は以下の表のとおりです。
変数名 |
説明 |
値の範囲 |
デフォルト値 |
設定の推奨 |
|---|---|---|---|---|
| parallel_servers_target | クエリがキューイングされる前に、検証するクエリ要求の並列度と統計されたWorkerの合計がこの値を超えていないかどうかを制御します。この値を超えた場合、クエリはキューイングされ、そうでない場合はクエリは実行を続けます。 | [0, 1800] | 10(現在はCPU数に基づいて計算され、実際のサイズが優先されます) | この変数は主にPXシナリオで、パラレルクエリを実行しようとする際に、処理するためのWorkerが十分にいない場合、実行を続けるかキュー待ちにするかを判断するために使用されます。 |
| _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の間)でデータを送信する際の、各送信バッファサイズを制御します。データがこの上限値に達した場合にのみ送信されるため、各行の転送コストを削減できます。 |
[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を有効にすると追加のオーバーヘッドが発生するため、このシナリオではこの機能を無効にすることを検討できます。 |