Variable
Variables in Doris refer to variable settings in MySQL. However, some of the variables are only used to be compatible with some MySQL client protocols, and do not produce their actual meaning in the MySQL database.
All or specified variables can be viewed via . Such as:
Some variables can be set at global-level or session-only. For global-level, the set value will be used in subsequent new session connections. For session-only, the variable only works for the current session.
For session-only, set by the SET var_name=xxx;
statement. Such as:
SET exec_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";
For global-level, set by SET GLOBAL var_name=xxx;
. Such as:
Variables that support both session-level and global-level setting include:
time_zone
wait_timeout
sql_mode
enable_profile
query_timeout
exec_mem_limit
batch_size
parallel_fragment_exec_instance_num
parallel_exchange_instance_num
allow_partition_column_nullable
insert_visible_timeout_ms
enable_fold_constant_by_be
Variables that support only global-level setting include:
default_rowset_type
At the same time, variable settings also support constant expressions. Such as:
SET exec_mem_limit = 10 * 1024 * 1024 * 1024;
SET forward_to_master = concat('tr', 'u', 'e');
In some scenarios, we may need to set variables specifically for certain queries. The SET_VAR hint sets the session value of a system variable temporarily (for the duration of a single statement). Examples:
Note that the comment must start with /*+ and can only follow the SELECT.
Supported variables
SQL_AUTO_IS_NULL
Used for compatible JDBC connection pool C3P0. No practical effect.
auto_increment_increment
Used for compatibility with MySQL clients. No practical effect.
autocommit
Used for compatibility with MySQL clients. No practical effect.
batch_size
Used to specify the number of rows of a single packet transmitted by each node during query execution. By default, the number of rows of a packet is 1024 rows. That is, after the source node generates 1024 rows of data, it is packaged and sent to the destination node.
A larger number of rows will increase the throughput of the query in the case of scanning large data volumes, but may increase the query delay in small query scenario. At the same time, it also increases the memory overhead of the query. The recommended setting range is 1024 to 4096.
character_set_client
Used for compatibility with MySQL clients. No practical effect.
character_set_connection
Used for compatibility with MySQL clients. No practical effect.
character_set_results
Used for compatibility with MySQL clients. No practical effect.
character_set_server
Used for compatibility with MySQL clients. No practical effect.
codegen_level
Used to set the level of LLVM codegen. (Not currently in effect).
collation_connection
Used for compatibility with MySQL clients. No practical effect.
collation_database
Used for compatibility with MySQL clients. No practical effect.
collation_server
Used for compatibility with MySQL clients. No practical effect.
delete_without_partition
When set to true. When using the delete command to delete partition table data, no partition is required. The delete operation will be automatically applied to all partitions.
Note, however, that the automatic application to all partitions may cause the delete command to take a long time to trigger a large number of subtasks and cause a long time. If it is not necessary, it is not recommended to turn it on.
disable_colocate_join
Controls whether the function is enabled. The default is false, which means that the feature is enabled. True means that the feature is disabled. When this feature is disabled, the query plan will not attempt to perform a Colocation Join.
enable_bucket_shuffle_join
Controls whether the [Bucket Shuffle Join] (./bucket-shuffle-join.md) function is enabled. The default is true, which means that the feature is enabled. False means that the feature is disabled. When this feature is disabled, the query plan will not attempt to perform a Bucket Shuffle Join.
disable_streaming_preaggregations
Controls whether streaming pre-aggregation is turned on. The default is false, which is enabled. Currently not configurable and enabled by default.
enable_insert_strict
Used to set the
strict
mode when loading data via INSERT statement. The default is false, which means that thestrict
mode is not turned on. For an introduction to this mode, see here.enable_spilling
Used to set whether to enable external sorting. The default is false, which turns off the feature. This feature is enabled when the user does not specify a LIMIT condition for the ORDER BY clause and also sets
enable_spilling
to true. When this feature is enabled, the temporary data is stored in thedoris-scratch/
directory of the BE data directory and the temporary data is cleared after the query is completed.This feature is mainly used for sorting operations with large amounts of data using limited memory.
Note that this feature is experimental and does not guarantee stability. Please turn it on carefully.
exec_mem_limit
Used to set the memory limit for a single query. The default is 2GB, you can set it in B/K/KB/M/MB/G/GB/T/TB/P/PB, the default is B.
This parameter is used to limit the memory that can be used by an instance of a single query fragment in a query plan. A query plan may have multiple instances, and a BE node may execute one or more instances. Therefore, this parameter does not accurately limit the memory usage of a query across the cluster, nor does it accurately limit the memory usage of a query on a single BE node. The specific needs need to be judged according to the generated query plan.
Usually, only some blocking nodes (such as sorting node, aggregation node, and join node) consume more memory, while in other nodes (such as scan node), data is streamed and does not occupy much memory.
When a
Memory Exceed Limit
error occurs, you can try to increase the parameter exponentially, such as 4G, 8G, 16G, and so on.init_connect
Used for compatibility with MySQL clients. No practical effect.
interactive_timeout
Used for compatibility with MySQL clients. No practical effect.
enable_profile
Used to set whether you need to view the profile of the query. The default is false, which means no profile is required.
By default, the BE sends a profile to the FE for viewing errors only if an error occurs in the query. A successful query will not send a profile. Sending a profile will incur a certain amount of network overhead, which is detrimental to a high concurrent query scenario.
When the user wants to analyze the profile of a query, the query can be sent after this variable is set to true. After the query is finished, you can view the profile on the web page of the currently connected FE:
fe_host:fe_http:port/query
It will display the most recent 100 queries which
enable_profile
is set to true.language
Used for compatibility with MySQL clients. No practical effect.
license
Show Doris’s license. No other effect.
load_mem_limit
Used to specify the memory limit of the load operation. The default is 0, which means that this variable is not used, and
exec_mem_limit
is used as the memory limit for the load operation.This variable is usually used for INSERT operations. Because the INSERT operation has both query and load part. If the user does not set this variable, the respective memory limits of the query and load part are
exec_mem_limit
. Otherwise, the memory of query part of INSERT is limited toexec_mem_limit
, and the load part is limited toload_mem_limit
.For other load methods, such as BROKER LOAD, STREAM LOAD, the memory limit still uses
exec_mem_limit
.lower_case_table_names
Used to control whether the user table name is case-sensitive.
A value of 0 makes the table name case-sensitive. The default is 0.
When the value is 1, the table name is case insensitive. Doris will convert the table name to lowercase when storing and querying.
The advantage is that any case of table name can be used in one statement. The following SQL is correct:mysql> show tables;
+------------------+
| Tables_ in_testdb|
+------------------+
| cost |
+------------------+
mysql> select * from COST where COst.id < 100 order by cost.id;
The disadvantage is that the table name specified in the table creation statement cannot be obtained after table creation. The table name viewed by ‘show tables’ is lower case of the specified table name.
When the value is 2, the table name is case insensitive. Doris stores the table name specified in the table creation statement and converts it to lowercase for comparison during query.
The advantage is that the table name viewed by ‘show tables’ is the table name specified in the table creation statement;
The disadvantage is that only one case of table name can be used in the same statement. For example, the table name ‘cost’ can be used to query the ‘cost’ table:This variable is compatible with MySQL and must be configured at cluster initialization by specifying
lower_case_table_names=
in fe.conf. It cannot be modified by theset
statement after cluster initialization is complete, nor can it be modified by restarting or upgrading the cluster.The system view table names in information_schema are case-insensitive and behave as 2 when the value of
lower_case_table_names
is 0.
Translated with www.DeepL.com/Translator (free version)
max_allowed_packet
Used for compatible JDBC connection pool C3P0. No practical effect.
max_pushdown_conditions_per_column
For the specific meaning of this variable, please refer to the description of
max_pushdown_conditions_per_column
in . This variable is set to -1 by default, which means that the configuration value inbe.conf
is used. If the setting is greater than 0, the query in the current session will use the variable value, and ignore the configuration value inbe.conf
.max_scan_key_num
For the specific meaning of this variable, please refer to the description of
doris_max_scan_key_num
in BE Configuration. This variable is set to -1 by default, which means that the configuration value inbe.conf
is used. If the setting is greater than 0, the query in the current session will use the variable value, and ignore the configuration value inbe.conf
.net_buffer_length
Used for compatibility with MySQL clients. No practical effect.
net_read_timeout
Used for compatibility with MySQL clients. No practical effect.
net_write_timeout
Used for compatibility with MySQL clients. No practical effect.
parallel_exchange_instance_num
Used to set the number of exchange nodes used by an upper node to receive data from the lower node in the execution plan. The default is -1, which means that the number of exchange nodes is equal to the number of execution instances of the lower nodes (default behavior). When the setting is greater than 0 and less than the number of execution instances of the lower node, the number of exchange nodes is equal to the set value.
In a distributed query execution plan, the upper node usually has one or more exchange nodes for receiving data from the execution instances of the lower nodes on different BEs. Usually the number of exchange nodes is equal to the number of execution instances of the lower nodes.
In some aggregate query scenarios, if the amount of data to be scanned at the bottom is large, but the amount of data after aggregation is small, you can try to modify this variable to a smaller value, which can reduce the resource overhead of such queries. Such as the scenario of aggregation query on the DUPLICATE KEY data model.
parallel_fragment_exec_instance_num
For the scan node, set its number of instances to execute on each BE node. The default is 1.
A query plan typically produces a set of scan ranges, the range of data that needs to be scanned. These data are distributed across multiple BE nodes. A BE node will have one or more scan ranges. By default, a set of scan ranges for each BE node is processed by only one execution instance. When the machine resources are abundant, you can increase the variable and let more execution instances process a set of scan ranges at the same time, thus improving query efficiency.
The number of scan instances determines the number of other execution nodes in the upper layer, such as aggregate nodes and join nodes. Therefore, it is equivalent to increasing the concurrency of the entire query plan execution. Modifying this parameter will help improve the efficiency of large queries, but larger values will consume more machine resources, such as CPU, memory, and disk IO.
-
Used for compatibility with MySQL clients. No practical effect.
query_cache_type
Used for compatible JDBC connection pool C3P0. No practical effect.
query_timeout
Used to set the query timeout. This variable applies to all query statements in the current connection, as well as INSERT statements. The default is 5 minutes, in seconds.
resource_group
Not used.
send_batch_parallelism
Used to set the default parallelism for sending batch when execute InsertStmt operation, if the value for parallelism exceed
max_send_batch_parallelism_per_job
in BE config, then the coordinator BE will use the value ofmax_send_batch_parallelism_per_job
.sql_mode
Used to specify SQL mode to accommodate certain SQL dialects. For the SQL mode, see .
sql_safe_updates
Used for compatibility with MySQL clients. No practical effect.
sql_select_limit
Used for compatibility with MySQL clients. No practical effect.
system_time_zone
Displays the current system time zone. Cannot be changed.
time_zone
Used to set the time zone of the current session. The time zone has an effect on the results of certain time functions. For the time zone, see here.
tx_isolation
Used for compatibility with MySQL clients. No practical effect.
version
Used for compatibility with MySQL clients. No practical effect.
performance_schema
Used for compatibility with MySQL JDBC 8.0.16 or later version. No practical effect.
-
Used to display the version of Doris. Cannot be changed.
wait_timeout
The length of the connection used to set up an idle connection. When an idle connection does not interact with Doris for that length of time, Doris will actively disconnect the link. The default is 8 hours, in seconds.
use_v2_rollup
Used to control the sql query to use segment v2 rollup index to get data. This variable is only used for validation when upgrading to segment v2 feature. Otherwise, not recommended to use.
rewrite_count_distinct_to_bitmap_hll
Whether to rewrite count distinct queries of bitmap and HLL types as bitmap_union_count and hll_union_agg.
prefer_join_method
When choosing the join method(broadcast join or shuffle join), if the broadcast join cost and shuffle join cost are equal, which join method should we prefer.
Currently, the optional values for this variable are “broadcast” or “shuffle”.
allow_partition_column_nullable
Whether to allow the partition column to be NULL when creating the table. The default is true, which means NULL is allowed. false means the partition column must be defined as NOT NULL.
insert_visible_timeout_ms
When execute insert statement, doris will wait for the transaction to commit and visible after the import is completed. This parameter controls the timeout of waiting for transaction to be visible. The default value is 10000, and the minimum value is 1000.
enable_exchange_node_parallel_merge
In a sort query, when an upper level node receives the ordered data of the lower level node, it will sort the corresponding data on the exchange node to ensure that the final data is ordered. However, when a single thread merges multiple channels of data, if the amount of data is too large, it will lead to a single point of exchange node merge bottleneck.
Doris optimizes this part if there are too many data nodes in the lower layer. Exchange node will start multithreading for parallel merging to speed up the sorting process. This parameter is false by default, which means that exchange node does not adopt parallel merge sort to reduce the extra CPU and memory consumption.
extract_wide_range_expr
Used to control whether turn on the ‘Wide Common Factors’ rule. The value has two: true or false. On by default.
enable_fold_constant_by_be
Used to control the calculation method of constant folding. The default is
false
, that is, calculation is performed inFE
; if it is set totrue
, it will be calculated byBE
throughRPC
request.cpu_resource_limit
Used to limit the resource overhead of a query. This is an experimental feature. The current implementation is to limit the number of scan threads for a query on a single node. The number of scan threads is limited, and the data returned from the bottom layer slows down, thereby limiting the overall computational resource overhead of the query. Assuming it is set to 2, a query can use up to 2 scan threads on a single node.
This parameter will override the effect of
parallel_fragment_exec_instance_num
. That is, assuming thatparallel_fragment_exec_instance_num
is set to 4, and this parameter is set to 2. Then 4 execution instances on a single node will share up to 2 scanning threads.This parameter will be overridden by the
cpu_resource_limit
configuration in the user property.The default is -1, which means no limit.
disable_join_reorder
Used to turn off all automatic join reorder algorithms in the system. There are two values: true and false.It is closed by default, that is, the automatic join reorder algorithm of the system is adopted. After set to true, the system will close all automatic sorting algorithms, adopt the original SQL table order, and execute join
enable_infer_predicate
Used to control whether to perform predicate derivation. There are two values: true and false. It is turned off by default, that is, the system does not perform predicate derivation, and uses the original predicate to perform related operations. After it is set to true, predicate expansion is performed.
block_encryption_mode
The block_encryption_mode variable controls the block encryption mode. The default setting is empty, when use AES equal toAES_128_ECB
, when use SM4 equal toSM3_128_ECB
available values:
AES_128_ECB,
AES_192_ECB,
AES_256_ECB,
AES_128_CBC,
AES_192_CBC,
AES_256_CBC,
AES_128_CFB,
AES_192_CFB,
AES_256_CFB,
AES_128_CFB1,
AES_192_CFB1,
AES_256_CFB1,
AES_128_CFB8,
AES_192_CFB8,
AES_256_CFB8,
AES_128_CFB128,
AES_192_CFB128,
AES_256_CFB128,
AES_128_CTR,
AES_192_CTR,
AES_256_CTR,
AES_128_OFB,
AES_192_OFB,
AES_256_OFB,
SM4_128_ECB,
SM4_128_CBC,
SM4_128_CFB128,
SM4_128_OFB,