システム変数
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; を使用する必要があります。単一セッションでそのような変数を設定しようとすると、エラーが返されます。
- 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 ヒントを使用することで、単一の文内でのみ有効なセッション変数を設定できます。
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(query_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(query_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;
変数の説明
変数はアルファベット順に説明されています。global ラベルの付いた変数はグローバルにのみ有効です。他の変数はグローバルまたは単一セッションで有効にすることができます。
activate_all_roles_on_login (global)
- 説明: StarRocks ユーザーが StarRocks クラスタに接続する際に、すべてのロール(デフォルトロールと付与されたロールを含む)を有効にするかどうか。
- 有効にすると(
true)、ユーザーのすべてのロールがログイン時に有効になります。これは SET DEFAULT ROLE で設定されたロールよりも優先されます。 - 無効にすると(
false)、SET DEFAULT ROLE で設定されたロールが有効になります。
- 有効にすると(
- デフォルト: false
- 導入バージョン: v3.0
セッションで割り当てられたロールを有効にしたい場合は、SET ROLE コマンドを使用してください。
auto_increment_increment
MySQL クライアント互換性のために使用されます。実用的な使用法はありません。
autocommit
MySQL クライアント互換性のために使用されます。実用的な使用法はありません。
chunk_size
- 説明: クエリ実行中に各ノードが送信する単一パケットの行数を指定するために使用されます。デフォルトは 4096 で、ソースノードによって生成されたデータの 4096 行ごとにパッケージ化され、宛先ノードに送信されます。行数が多いほど、大量データシナリオでのクエリスループットが向上しますが、小量データシナリオでのクエリ遅延が増加する可能性があります。また、クエリのメモリオーバーヘッドが増加する可能性があります。
batch_sizeを 1024 から 4096 の間に設定することをお勧めします。 - デフォルト: 4096
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
- 説明: セッションが属する catalog を指定するために使用されます。
- デフォルト: default_catalog
- データ型: 文字列
- 導入バージョン: v3.2.4
cbo_decimal_cast_string_strict
- 説明: CBO が DECIMAL 型から STRING 型にデータを変換する方法を制御します。この変数が
trueに設定されている場合、v2.5.x 以降のバージョンで組み込まれたロジックが優先され、システムは厳密な変換を実行します(つまり、生成された文字列を切り捨て、スケール長に基づいて 0 を埋めます)。この変数がfalseに設定されている場合、v2.5.x より前のバージョンで組み込まれたロジックが優先され、システムはすべての有効な数字を処理して文字列を生成します。 - デフォルト: true
- 導入バージョン: v2.5.14