システム変数
CelerData は、要件に合わせて設定・変更できる多くのシステム変数を提供しています。このセクションでは、CelerData がサポートする変数について説明します。これらの変数の設定は、MySQL クライアントで SHOW VARIABLES コマンドを実行することで確認できます。また、SET コマンドを使用して、変数を動的に設定または変更することもできます。これらの変数は、システム全体でグローバルに、現在のセッションのみで、または単一のクエリステートメントでのみ有効にすることができます。
CelerData の変数は MySQL の変数セットを参照していますが、一部の変数は MySQL クライアントプロトコルと互換性があるだけで、MySQL データベースでは機能しません。
注意
どのユーザーも SHOW VARIABLES を実行し、セッションレベルで変数を有効にする権限を持っています。ただし、SYSTEM レベルの OPERATE 権限を持つユーザーのみが、変数をグローバルに有効にすることができます。グローバルに有効な変数は、将来のすべてのセッション(現在のセッションを除く)で有効になります。
現在のセッションの設定変更を行い、将来のすべてのセッションにもその設定変更を適用したい 場合は、
GLOBAL
修飾子を使用せずに一度、使用してもう一度、設定を二度行うことができます。例えば:SET query_mem_limit = 137438953472; -- 現在のセッションに適用。
SET GLOBAL query_mem_limit = 137438953472; -- 将来のすべてのセッションに適用。
変数の表示
SHOW VARIABLES [LIKE 'xxx']
を使用して、すべてまたは一部の変数を表示できます。例:
-- システム内のすべての変数を表示。
SHOW VARIABLES;
-- 特定のパターンに一致する変数を表示。
SHOW VARIABLES LIKE '%time_zone%';
変数の設定
変数をグローバルまたは単一セッションで設定
変数を グローバルに または 現在のセッションのみで 有効に設定できます。グローバルに設定すると、新しい値は将来のすべてのセッションで使用されますが、現在のセッションは元の値を使用します。「現在のセッションのみ」に設定すると、変数は現在のセッションでのみ有効になります。
SET <var_name> = xxx;
で設定された変数は、現在のセッションでのみ有効です。例:
SET query_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";
SET GLOBAL <var_name> = xxx;
で設定された変数は、グローバルに有効です。例:
SET GLOBAL query_mem_limit = 137438953472;
以下の変数はグローバルにのみ有効です。単一のセッションで有効にすることはできません。これらの変数には SET GLOBAL <var_name> = xxx;
を使用する必要があります。単一のセッションでそのような変数を設定しようとすると(SET <var_name> = xxx;
)、エラーが返されます。
- activate_all_roles_on_login
- character_set_database
- default_rowset_type
- enable_query_queue_select
- enable_query_queue_statistic
- enable_query_queue_load
- init_connect
- lower_case_table_names
- license
- language
- query_cache_size
- query_queue_fresh_resource_usage_interval_ms
- query_queue_concurrency_limit
- query_queue_mem_used_pct_limit
- query_queue_cpu_used_permille_limit
- query_queue_pending_timeout_second
- query_queue_max_queued_queries
- system_time_zone
- version_comment
- version
さらに、変数設定は定数式もサポートしています。例えば:
SET query_mem_limit = 10 * 1024 * 1024 * 1024;
SET forward_to_master = concat('tr', 'u', 'e');
単一のクエリステートメントで変数を設定
特定のクエリに対して変数を設定する必要がある場合があります。SET_VAR
ヒントを使用することで、単一のステートメント内でのみ有効なセッション変数を設定できます。例:
SELECT /*+ SET_VAR(query_mem_limit = 8589934592) */ name FROM people ORDER BY name;
SELECT /*+ SET_VAR(query_timeout = 1) */ sleep(3);
注意
SET_VAR
はSELECT
キーワードの後にのみ配置でき、/*+...*/
で囲む必要があります。
単一のステートメントで複数の変数を設定することもできます。例:
SELECT /*+ SET_VAR
(
exec_mem_limit = 515396075520,
query_timeout=10000000,
batch_size=4096,
parallel_fragment_exec_instance_num=32
)
*/ * FROM TABLE;
変数の説明
変数は アルファベット順 に説明されています。global
ラベルが付いている変数はグローバルにのみ有効です。他の変数はグローバルまたは単一のセッションで有効にすることができます。
activate_all_roles_on_login (global)
CelerData ユーザーが CelerData クラスターに接続したときに、すべてのロール(デフォルトロールと付与されたロールを含む)を有効にするかどうか。
- 有効(true)の場合、ユーザーのすべてのロールがログイン時にアクティブになります。これは SET DEFAULT ROLE で設定されたロールよりも優先されます。
- 無効(false)の場合、SET DEFAULT ROLE で設定されたロールがアクティブになります。
デフォルト値: false。
セッション内で割り当てられたロールをアクティブにしたい場合は、SET ROLE コマンドを使用してください。
auto_increment_increment
MySQL クライアント互換性のために使用されます。実用的な使用法はありません。
autocommit
MySQL クライアント互換性のために使用されます。実用的な使用法はありません。
batch_size
クエリ実行中に各ノードが送信する単一パケットの行数を指定するために使用されます。デフォルトは 1024 で、ソースノードによって生成されたデータの 1024 行ごとにパッケージ化され、宛先ノードに送信されます。行数が多いほど、大量データシナリオでのクエリスループットが向上しますが、小規模データシナリオでのクエリ遅延が増加する可能性があります。また、クエリのメモリオーバーヘッドが増加する可能性があります。batch_size
を 1024 から 4096 の間に設定することをお勧めします。
catalog
セッションが属する catalog を指定するために使用されます。
cbo_enable_low_cardinality_optimize
低基数最適化を有効にするかどうか。この機能を有効にすると、STRING 列のクエリパフォーマンスが約 3 倍向上します。デフォルト値: true。
character_set_database (global)
CelerData がサポートする文字セット。UTF8 (utf8
) のみがサポートされています。
connector_io_tasks_per_scan_operator
外部テーブルクエリ中にスキャンオペレーターが発行できる最大の同時 I/O タスク数。値は整数です。デフォルト値: 16。
現在、CelerData は外部テーブルをクエリする際に同時 I/O タスク数を適応的に調整できま す。この機能は、デフォルトで有効になっている変数 enable_connector_adaptive_io_tasks
によって制御されます。
count_distinct_column_buckets
グループバイカウントディスティンクトクエリにおける COUNT DISTINCT 列のバケット数。この変数は、enable_distinct_column_bucketization
が true
に設定されている場合にのみ有効です。デフォルト値: 1024。
default_rowset_type (global)
グローバル変数。計算ノードのストレージエンジンで使用されるデフォルトのストレージ形式を設定するために使用されます。現在サポートされているストレージ形式は alpha
と beta
です。
default_table_compression
テーブルストレージのデフォルトの圧縮アルゴリズム。サポートされている圧縮アルゴリズムは snappy, lz4, zlib, zstd
です。デフォルト値: lz4_frame。
CREATE TABLE ステートメントで compression
プロパティを指定した場合、compression
で指定された圧縮アルゴリズムが有効になります 。
disable_colocate_join
Colocation Join を有効にするかどうかを制御するために使用されます。デフォルト値は false
で、この機能が有効であることを意味します。この機能が無効になっている場合、クエリプランニングは Colocation Join を実行しようとしません。
disable_streaming_preaggregations
ストリーミング事前集計を有効にするために使用されます。デフォルト値は false
で、これは有効であることを意味します。
div_precision_increment
MySQL クライアント互換性のために使用されます。実用的な使用法はありません。
enable_connector_adaptive_io_tasks
外部テーブルをクエリする際に同時 I/O タスク数を適応的に調整するかどうか。デフォルト値: true。
この機能が有効でない場合、変数 connector_io_tasks_per_scan_operator
を使用して同時 I/O タスク数を手動で設定できます。
enable_distinct_column_bucketization
グループバイカウントディスティンクトクエリにおける COUNT DISTINCT 列のバケット化を有効にするかどうか。select a, count(distinct b) from t group by a;
クエリを例として使用します。GROUP BY 列 a
が低基数列で、COUNT DISTINCT 列 b
が高基数列でデータスキューが激しい場合、パフォーマンスボトルネックが発生します。この状況では、COUNT DISTINCT 列のデータを複数のバケットに分割してデータをバランスさせ、データスキューを防ぐことができます。
デフォルト値: false。この機能が無効であることを意味します。この変数は、変数 count_distinct_column_buckets
と一緒に使用する必要があります。
また、クエリに skew
ヒントを追加することで、COUNT DISTINCT 列のバケット化を有効にすることもできます。例:select a,count(distinct [skew] b) from t group by a;
。
enable_iceberg_metadata_cache
Iceberg テーブルのポインタとパーティション名をキャッシュするかどうか。v3.2.1 から v3.2.3 まで、このパラメータは使用されるメタストアサー ビスに関係なくデフォルトで true
に設定されています。v3.2.4 以降、Iceberg クラスターが AWS Glue をメタストアとして使用している場合、このパラメータはデフォルトで true
です。しかし、Iceberg クラスターが Hive メタストアなどの他のメタストアサービスを使用している場合、このパラメータはデフォルトで false
です。
enable_insert_strict
INSERT ステートメントを使用してデータをロードする際に厳密モードを有効にするために使用されます。デフォルト値は true
で、厳密モードがデフォルトで有効であることを示しています。詳細は Strict mode を参照してください。
enable_materialized_view_union_rewrite
マテリアライズドビューの Union クエリの書き換えを有効にするかどうかを制御するブール値。デフォルト: true
。
enable_rule_based_materialized_view_rewrite
ルールベース のマテリアライズドビュークエリの書き換えを有効にするかどうかを制御するブール値。この変数は主に単一テーブルクエリの書き換えに使用されます。デフォルト: true
。
enable_spill
中間結果のスピリングを有効にするかどうか。デフォルト: false
。true
に設定されている場合、CelerData はクエリ内の集約、ソート、またはジョインオペレーターを処理する際にメモリ使用量を削減するために中間結果をディスクにスピルします。
enable_profile
クエリのプロファイルを分析のために送信するかどうかを指定します。デフォルト値は false
で、プロファイルが必要ないことを意味します。
デフォルトでは、クエリエラーが BE で発生した場合にのみプロファイルが FE に送信されます。プロファイルの送信はネットワークオーバーヘッドを引き起こし、したがって高い同時実行性に影響を与えます。
クエリのプロファイルを分析する必要がある場合、この変数を true
に設定できます。クエリが完了した後、プロファイルは現在接続されている FE のウェブページ(アドレス:fe_host:fe_http_port/query
)で表示できます。このページには、enable_profile
がオンになっている最新の 100 件のクエリのプロファイルが表示されます。
enable_query_queue_load (global)
ロードタスクのクエリキューを有効にするためのブール値。デフォルト: false
。
enable_query_queue_select (global)
SELECT クエリのクエリキューを有効にするためのブール値。デフォルト: false
。
enable_query_queue_statistic (global)
統計クエリのクエリキューを有効にするためのブール値。
enable_query_tablet_affinity
同じタブレットに対する複数のクエリを固定レプリカに向けるかどうかを制御するブール値。
クエリするテーブルに大量のタブレットがあるシナリオでは、この機能によりクエリパフォーマンスが大幅に向上します。なぜなら、タブレットのメタ情報とデータがメモリにより迅速にキャッシュされるから です。
ただし、ホットスポットタブレットがある場合、この機能はクエリパフォーマンスを低下させる可能性があります。なぜなら、クエリを同じ BE に向けることで、高い同時実行性 シナリオで複数の BE のリソースを十分に活用できなくなるからです。
デフォルト値: false
、これはシステムが各クエリのレプリカを選択することを意味します。
enable_scan_block_cache
Data Cache 機能を有効にするかどうかを指定します。この機能を有効にすると、CelerData は外部ストレージシステムから読み取ったホットデータをブロックにキャッシュし、クエリと分析を高速化します。
enable_populate_block_cache
CelerData に外部ストレージシステムから読み取ったデータブロックをキャッシュするかどうかを指定します。外部ストレージシステムから読み取ったデータブロックをキャッシュしたくない場合、この変数を false
に設定します。デフォルト値: true。
enable_tablet_internal_parallel
タブレッ トの適応並列スキャンを有効にするかどうか。機能が有効になると、複数のスレッドを使用してセグメントごとにタブレットをスキャンし、スキャンの並行性を高めます。デフォルト値: true。
enable_adaptive_sink_dop
データロードの適応並行性を有効にするかどうかを指定します。この機能を有効にすると、システムは INSERT INTO および Broker Load ジョブのロード並行性を自動的に設定し、pipeline_dop
のメカニズムと同等になります。デフォルト値: true
。
enable_pipeline_engine
パイプライン実行エンジンを有効にするかどうかを指定します。true
は有効であることを示し、false
は無効であることを示します。デフォルト値: true
。
enable_sort_aggregate
ソートストリーミングを有効にするかどうかを指定します。true
はデータストリーム内のデータをソートするためにソートストリーミングが有効であることを示します。
enable_global_runtime_filter
グローバルランタイムフィルター(RF)を有効にするかどうか。RF はランタイムでデータをフィルタリングします。データフィルタリングは通常、ジョインステージで発生します。マルチテーブルジョイン中に、述語プッシュダウンなどの最適化を使用してデータをフィルタリングし、ジョインのスキャン行数と Shuffle ステージの I/O を削減し、クエリを高速化します。
CelerData は 2 種類の RF を提供します:ローカル RF とグローバル RF。ローカル RF は Broadcast Hash Join に適しており、グローバル RF は Shuffle Join に適しています。
デフォルト値: true
、これはグローバル RF が有効であることを意味します。この機能が無効になっている場合、グローバル RF は効果を発揮しません。ローカル RF は引き続き機能します。
enable_multicolumn_global_runtime_filter
マルチカラムグローバルランタイムフィルターを有効にするかどうか。デフォルト値: false
、これはマルチカラムグローバル RF が無効であることを意味します。
Broadcast Join および Replicated Join 以外のジョインに複数の等価ジョイン条件がある場合:
- この機能が無効になっている場合、ローカル RF のみが機能します。
- この機能が有効になっている場合、マルチカラムグローバル RF が有効になり、パーティションバイクロースに
multi-column
を含みます。
event_scheduler
MySQL クライアント互換性のために使用されます。実用的な使用法はありません。
enable_strict_type
すべての複合述語および WHERE 句内のすべての式に対して暗黙の変換を許可するかどうか。デフォルト値: false
。
force_streaming_aggregate
集約ノードが計算のためにストリーミング集約を有効にするかどうかを制御するために使用されます。デフォルト値は false で、この機能が有効でないことを意味します。
forward_to_master
一部のコマンドをリーダー FE に転送して実行するかどうかを指定するために使用されます。デフォルト値は false
で、リーダー FE に転送しないことを意味します。CelerData クラスターには複数の FE があり、そのうちの 1 つがリーダ ー FE です。通常、ユーザーは任意の FE に接続してフル機能の操作を行うことができます。ただし、一部の情報はリーダー FE にのみ存在します。
たとえば、SHOW BACKENDS コマンドがリーダー FE に転送されない場合、ノードが生きているかどうかなどの基本情報のみが表示されます。リーダー FE に転送することで、ノードの起動時間や最終ハートビート時間などの詳細情報を取得できます。
この変数に影響を受けるコマンドは次のとおりです:
-
SHOW FRONTENDS: リーダー FE に転送することで、ユーザーは最終ハートビートメッセージを表示できます。
-
SHOW BACKENDS: リーダー FE に転送することで、ユーザーは起動時間、最終ハートビート情報、ディスク容量情報を表示できます。
-
SHOW BROKER: リーダー FE に転送することで、ユーザーは起動時間と最終ハートビート情報を表示できます。
-
SHOW TABLET
-
ADMIN SHOW REPLICA DISTRIBUTION
-
ADMIN SHOW REPLICA STATUS: リーダー FE に転送することで、ユーザーはリーダー FE のメタデータに保存されているタブレット情報を表示できます。通常、タブレット情報は異なる FE のメタデータで同じであるべきです。エラーが発生した場合、この方法を使用して現在の FE とリーダー FE のメタデータを比較できます。
-
Show PROC: リーダー FE に転送することで、ユーザーはメタデータに保存されている PROC 情報を表示できます。これは主にメタデータの比較に使用されます。