システム変数
StarRocks は、多くのシステム変数を提供しており、要件に応じて設定や変更が可能です。このセクションでは、StarRocks がサポートする変数について説明します。これらの変数の設定を確認するには、MySQL クライアントで SHOW VARIABLES コマンドを実行します。また、SET コマンドを使用して、変数を動的に設定または変更することもできます。これらの変数は、システム全体でグローバルに、現在のセッションのみで、または単一のクエリ文でのみ有効にすることができます。
StarRocks の変数は、MySQL の変数セットを参照していますが、一部の変数は MySQL クライアントプロトコルとの互換性のみを持ち、MySQL データベースでは機能しません。
注意
どのユーザーでも SHOW VARIABLES を実行し、セッションレベルで変数を有効にする権限があります。ただし、SYSTEM レベルの OPERATE 権限を持つユーザーのみが、変数をグローバルに有効にすることができます。グローバルに有効な変数は、すべての将来のセッション(現在のセッションを除く)で有効になります。
現在のセッ ションの設定変更を行い、さらにその設定変更をすべての将来のセッションに適用したい場合は、
GLOBAL修飾子を使用せずに一度、使用してもう一度変更を行うことができます。例:SET query_mem_limit = 137438953472; -- 現在のセッションに適用。
SET GLOBAL query_mem_limit = 137438953472; -- すべての将来のセッションに適用。
変数の階層と種類
StarRocks は、グローバル変数、セッション変数、SET_VAR ヒントの3種類(レベル)の変数をサポートしています。それらの階層関係は次のとおりです:
- グローバル変数はグローバルレベルで有効であり、セッション変数や
SET_VARヒントによって上書きされることがあります。 - セッション変数は現在のセッションでのみ有効であり、
SET_VARヒントによって上書きされることがあります。 SET_VARヒントは、現在のクエリ文でのみ有効です。
変数の表示
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
- cngroup_low_watermark_cpu_used_permille
- cngroup_low_watermark_running_query_count
- cngroup_resource_usage_fresh_ratio
- cngroup_schedule_mode
- default_rowset_type
- enable_group_level_query_queue
- enable_query_history
- enable_query_queue_load
- enable_query_queue_select
- enable_query_queue_statistic
- enable_table_name_case_insensitive
- enable_tde
- init_connect
- language
- license
- lower_case_table_names
- performance_schema
- query_cache_size
- query_history_keep_seconds
- query_history_load_interval_seconds
- query_queue_concurrency_limit
- query_queue_cpu_used_permille_limit
- query_queue_driver_high_water
- query_queue_driver_low_water
- query_queue_fresh_resource_usage_interval_ms
- query_queue_max_queued_queries
- query_queue_mem_used_pct_limit
- query_queue_pending_timeout_second
- system_time_zone
- version
- version_comment
さらに、変数設定は定数式もサポートしています。例:
SET query_mem_limit = 10 * 1024 * 1024 * 1024;
SET forward_to_master = concat('tr', 'u', 'e');
単一のクエリ文で変数を設定
特定のクエリに対して変数を設定する必要がある場合があります。SET_VAR ヒントを使用することで、単一の文内でのみ有効なセッション変数を設定できます。
StarRocks は、以下の文で SET_VAR の使用をサポートしています:
- SELECT
- INSERT (v3.1.12 および v3.2.0 以降)
- UPDATE (v3.1.12 および v3.2.0 以降)
- DELETE (v3.1.12 および v3.2.0 以降)
SET_VAR は、上記のキーワードの後にのみ配置され、/*+...*/ で囲まれます。
例:
SELECT /*+ SET_VAR(query_mem_limit = 8589934592) */ name FROM people ORDER BY name;
SELECT /*+ SET_VAR(query_timeout = 1) */ sleep(3);
UPDATE /*+ SET_VAR(insert_timeout=100) */ tbl SET c1 = 2 WHERE c1 = 1;
DELETE /*+ SET_VAR(query_mem_limit = 8589934592) */
FROM my_table PARTITION p1
WHERE k1 = 3;
INSERT /*+ SET_VAR(insert_timeout = 10000000) */
INTO insert_wiki_edit
SELECT * FROM FILES(
"path" = "s3://inserttest/parquet/insert_wiki_edit_append.parquet",
"format" = "parquet",
"aws.s3.access_key" = "XXXXXXXXXX",
"aws.s3.secret_key" = "YYYYYYYYYY",
"aws.s3.region" = "us-west-2"
);
単一の文で複数の変数を設定することもできます。例:
SELECT /*+ SET_VAR
(
exec_mem_limit = 515396075520,
query_timeout=10000000,
batch_size=4096,
parallel_fragment_exec_instance_num=32
)
*/ * FROM TABLE;
ユーザーのプロパティとして変数を設定
ALTER USER を使用して、セッション変数をユーザーのプロパティとして設定できます。この機能は v3.3.3 からサポートされています。
例:
-- ユーザー jack に対してセッション変数 `query_timeout` を `600` に設定。
ALTER USER 'jack' SET PROPERTIES ('session.query_timeout' = '600');
変数の説明
変数は アルファベット順 に説明されています。global ラベルが付いた変数はグローバルにのみ有効です。他の変数はグローバルまたは単一のセッションで有効にすることができます。
activate_all_roles_on_login (global)
- 説明: StarRocks ユーザーが StarRocks クラスタに接続する際に、すべてのロール(デフォルトロールと付与されたロールを含む)を有効にするかどうか。
- 有効にすると(
true)、ユーザーのすべてのロールがログイン時にアクティブになります。これは SET DEFAULT ROLE で設定されたロールよりも優先されます。 - 無効にすると(
false)、SET DEFAULT ROLE で設定されたロールがアクティブになります。
- 有効にすると(
- デフォルト: false
- 導入バージョン: v3.0
セッションで割り当てられたロールをアクティブにしたい場合は、SET ROLE コマンドを使用してください。
array_low_cardinality_optimize
- スコープ: Session
- 説明: オプティマイザが array<varchar> カラムを low-cardinality(辞書ベース)のデコードおよび関連最適化の対象として検討するかどうかを制御します。有効にすると、オプティマイザの low-cardinality ルール(例:
DecodeCollector)は辞書カラムを定義し、型がvarcharまたはarray<varchar>の式に対して辞書デコードを適用することがあります。無効にすると、スカラーのvarcharカラムのみが対象となり、array<varchar>型はこれらの low-cardinality 最適化によって無視されます。この変数は配列サポートの判定にDecodeCollector.supportAndEnabledLowCardinality(...)によって読み取られ、SessionVariableの getter/setter を介して公開されます。 - デフォルト:
true - タイプ: boolean
- 導入バージョン: v3.3.0, v3.4.0, v3.5.0
auto_increment_increment
MySQL クライアント互換性のために使用されます。実際の用途はありません。
big_query_profile_threshold
-
説明: 大規模なクエリのしきい値を設定するために使用されます。セッション変数
enable_profileがfalseに設定されており、クエリの実行時間が変数big_query_profile_thresholdで指定されたしきい値を超えた場合、そのクエリのプロファイルが生成されます。注: v3.1.5 から v3.1.7、および v3.2.0 から v3.2.2 では、大規模なクエリのしきい値を設定するために
big_query_profile_second_thresholdを導入しました。v3.1.8、v3.2.3、およびそれ以降のリリースでは、このパラメータはbig_query_profile_thresholdに置き換えられ、より柔軟な設定オプションを提供します。 -
デフォルト: 0
-
単位: 秒
-
データ型: 文字列
-
導入バージョン: v3.1
catalog
- 説明: セッションが属するカタログを指定するために使用されます。
- デフォルト: default_catalog
- データ型: 文字列
- 導入バージョン: v3.2.4
cbo_cte_force_reuse_node_count
- 説明: Common Table Expressions (CTE) に対するオプティマイザのショートカットを制御するセッションスコープの閾値。RelationTransformer.visitCTE 内でプランナは CTE プロデューサーツリーのノード数をカウントします(cteContext.getCteNodeCount)。そのカウントがこの閾値以上かつ閾値が 0 より大きい場合、transformer は CTE の再利用を強制します:プロデューサープランのインライン化/変換をスキップし、事前計算された式マッピング(入力なし)で consume 演算子を構築し、代わりに生成されたカラム参照を使用します。これにより非常に大きな CTE プロデューサーツリーに対するオプティマイザの時間を削減できますが、物理プランの最適性が若干低下する可能性があります。値を
0に設定すると force-reuse 最適化が無効になります。この変数は SessionVariable に getter/setter があり、セッション単位で適用されます。 - スコープ: Session
- デフォルト:
2000 - タイプ: int
- 導入バージョン: v3.5.3
cbo_cte_reuse
- 説明: オプティマイザが共通テーブル式(CTE)を再利用して multi-distinct 集計クエリを書き換えることを許可するかを制御します(CBO の CTE 再利用リライト)。有効にすると、プランナー(RewriteMultiDistinctRule)はマルチカラム DISTINCT、スキューした集計、または統計により CTE リライトの方が効率的であると示される場合に CTE ベースのリライトを選択することがあり、
prefer_cte_rewriteヒントを尊重します。無効にすると CTE ベースのリライトは許可されず、プランナーは multi-function リライトを試みます。クエリが CTE を必要とする場合(例:マルチカラム DISTINCT や multi-function リライトで扱えない関数など)は、プランナーはユーザーエラーを発生させます。注意:オプティマイザが参照する実際の設定はこのフラグとパイプラインエンジンフラグの論理 AND です — すなわちisCboCteReuse()はこの変数とenablePipelineEngineの両方を返す必要があるため、enablePipelineEngineがオンのときのみ CTE 再利用が有効になります。 - デフォルト:
true - タイプ: Boolean
- 導入バージョン:
v3.2.0
cbo_disabled_rules
- 説明: 現在のセッションで無効にするオプティマイザルール名のカンマ区切りリスト。各名前は
RuleType列挙値に一致する必要があり、無効化できるのは名前がTF_(変換ルール)またはGP_(グループ結合ルール)で始まるルールのみです。セッション変数はSessionVariableに格納され(getCboDisabledRules/setCboDisabledRules)、オプティマイザはOptimizerOptions.applyDisableRuleFromSessionVariable()を通じて適用します。同関数はリストを解析し、対応するルールスイッチをクリアしてプランニング時にそれらのルールをスキップします。SET ステートメントを通じて設定された場合、値は検証され、サーバは不明な名前やTF_/GP_で始まらない名前を明確なエラーメッセージ(例: "Unknown rule name(s): ..." や "Only TF_ ... and GP_ ... can be disabled")で拒否します。プランナ実行時には不明なルール名は警告とともに無視されます("Ignoring unknown rule name: ... (may be from different version)" とログに残る)。名前は列挙子識別子と正確に一致する必要があります(大文字小文字を区別)。名前の前後の空白はトリムされ、空のエントリは無視されます。 - スコープ: Session
- デフォルト:
""(無効化されたルールなし) - データ型: String
- 導入バージョン: -
cbo_enable_low_cardinality_optimize
- 説明: 低基数最適化を有効にするかどうか。この機能を有効にすると、STRING 列のクエリパフォーマンスが約 3 倍向上します。
- デフォルト: true
cbo_eq_base_type
- 説明: DECIMAL データと STRING データの間でデータ比較に使用されるデータ型を指定します。デフォルト値は
DECIMALであり、VARCHAR も有効な値です。この変数は=および!=比較にのみ有効です。 - データ型: 文字列
- 導入バージョン: v2.5.14
cbo_json_v2_dict_opt
- 説明: JSON v2 のパス書き換えで生成される Flat JSON の文字列サブカラムに対して、低カーディナリティ辞書最適化を有効にするかどうか。有効にすると、オプティマイザはそれらのサブカラムにグローバル辞書を構築・利用し、文字列式、GROUP BY、JOIN などを高速化できます。
- デフォルト: true
- データ型: Boolean
cbo_json_v2_rewrite
- 説明: オプティマイザで JSON v2 のパス書き換えを有効にするかどうか。有効にすると、JSON 関数(
get_json_*など)を Flat JSON のサブカラムへの直接アクセスに書き換え、述語プッシュダウン、カラムプルーニング、辞書最適化を有効化します。 - デフォルト: true
- データ型: Boolean
cbo_max_reorder_node_use_dp
- 説明: コストベースオプティマイザ(CBO)が DP(動的計画法)join-reorder アルゴリズムを含めるかを制御するセッションスコープの上限です。オプティマイザは join 入力数(MultiJoinNode.atoms.size())をこの値と比較し、
multiJoinNode.getAtoms().size() <= cbo_max_reorder_node_use_dpかつcbo_enable_dp_join_reorderが有効な場合にのみ DP reorder を実行または追加します。JoinReorderFactory.createJoinReorderAdaptive(候補アルゴリズムに JoinReorderDP を追加するため)および ReorderJoinRule.transform/rewrite(メモにプランをコピーするときに JoinReorderDP を実行するか決定するため)で使用されます。デフォルト値の 10 は実用的な性能のカットオフを反映しています(コード内コメント: "10 table join reorder takes more than 100ms")。この設定はオプティマイザの実行時間(DP は高コスト)と大規模な multi-join クエリに対するプラン品質のトレードオフを調整するためにチューニングしてください。cbo_enable_dp_join_reorderおよび 貪欲法の閾値cbo_max_reorder_node_use_greedyと相互作用します。比較は包含比較(<=)です。 - スコープ: セッション
- デフォルト:
10 - データタイプ: long
- 導入バージョン:
v3.2.0
cbo_max_reorder_node_use_exhaustive
- スコープ: セッション
- 説明: CBO における join-reorder アルゴリズム選択の閾値を制御します。オプティマイザはクエリ内の inner/cross join ノードをカウントし、その数がこの値より大きい場合、プランナは transform ベースの(より積極的な)reorder パスを取ります:CTE 統計の収集を強制し、ReorderJoinRule.transform および関連する可換性ルールを呼び出します。カウントがこの値以下の場合、プランナはより安価な join-transformation ルールを適用します(特定の semi/anti-join ケースでは INNER_JOIN_LEFT_ASSCOM_RULE を追加することがあります)。このセッション変数はオプティマイザ(
SPMOptimizer,QueryOptimizer)で参照され、セッションレベルではsetMaxTransformReorderJoinsを介して設定できます。 - デフォルト:
4 - データタイプ: int
- 導入バージョン: v3.2.0
cbo_max_reorder_node_use_greedy
- 説明: コストベースオプティマイザが greedy join-reorder アルゴリズムを検討するマルチジョイン内の結合入力(アトム)の最大数。オプティマイザは候補となるリオーダーアルゴリズムのリストを構築する際にこの制限(
cbo_enable_greedy_join_reorderと併せて)をチェックします:もしmultiJoinNode.getAtoms().size()がこの値以下であれば、JoinReorderGreedyのインスタンスが追加され実行されます。この変数はJoinReorderFactory.createJoinReorderAdaptive()とReorderJoinRuleによって、ジョインリオーダー段階での greedy リオーダリングの適用可否を制御するために使用されます。セッションごとに適用され、統計情報が利用可能でかつ greedy が有効な場合に greedy リオーダリングが試行されるかに影響します。多数の結合されたリレーションを含むクエリに対するオプティマイザの時間/複雑度のトレードオフを制御するために調整してください。 - スコープ: Session (セッションごとに変更可能)
- デフォルト:
16 - データタイプ: long
- 導入バージョン: v3.4.0, v3.5.0
cbo_use_correlated_predicate_estimate
- 説明: セッションフラグ。オプティマイザが、複数列にまたがる結合された等価述語の選択率を推定する際に相関を考慮したヒューリスティックを適用するかを制御します。有効(デフォルト)の場合、推定器はプライマリのマルチカラム統計や最も選択的な述語を除く追加列に対して指数減衰重みを適用し、追加述語の乗算的影響を軽減します(重み:追加最大3列に対して 0.5、0.25、0.125)。無効の場合、減衰は適用されず(減衰係数 = 1)、これらの列の完全な選択率を乗算します(より強い独立仮定)。このフラグは StatisticsEstimateUtils.estimateConjunctiveEqualitySelectivity により確認され、マルチカラム統計経路とフォールバック経路の両方で減衰係数を選択するため、CBO が使用するカーディナリティ推定に影響します。
- スコープ: Session
- デフォルト:
true - タイプ: boolean
- 導入バージョン: v3.5.0
character_set_database (global)
- データ型: 文字列 StarRocks がサポートする文字セット。UTF8 (
utf8) のみがサポートされています。 - デフォルト: utf8
- データ型: 文字列
collation_server
- スコープ: Session
- 説明: FE がこのセッションに対して MySQL 互換の照合順序動作を提示するために使用するセッションレベルのサーバ照合名。この変数は、FE がクライアントに報告し、
character_set_server/collation_connection/collation_databaseに関連付けられるデフォルトの照合識別子(例:utf8_general_ci)を設定します。セッション変数 JSON に永続化されます(SessionVariable#getJsonString / replayFromJson を参照)および変数マネージャーを通じて公開されます(@VarAttr(name = COLLATION_SERVER))、したがって SHOW VARIABLES に表示されセッションごとに変更可能です。値は SessionVariable にプレーンな String として保存され、通常は標準的な MySQL の照合名(例:utf8_general_ci,utf8mb4_unicode_ci)を保持します。ここでコードは固定列挙型を強制したり追加の検証を行ったりしないため、比較やソートなど照合に敏感な操作の実際の動作は照合名を解釈する下流コンポーネントに依存します。 - デフォルト:
utf8_general_ci - データ型: String
- 導入バージョン:
v3.2.0