文档

Config和Hint配置参数

更新时间:

AnalyticDB for MySQL支持通过SET ADB_CONFIG命令和Hint两种方式配置参数。其中,SET ADB_CONFIG命令用于修改全局配置,修改后,该配置项会作用于整个集群;使用Hint修改参数后,该Hint仅作用于指定SQL,不影响全局配置。若同时使用SET ADB_CONFIG命令和Hint配置了参数,则优先采用Hint方式配置的参数。本文为您介绍云原生数据仓库AnalyticDB MySQL版中常见的配置参数。

常用Config参数

类别

参数

描述

示例

文档链接

新旧集群的切换时间

REPLICATION_SWITCH_TIME_RANGE

新旧集群切换期间,旧集群会有5~10分钟的时间仅支持只读操作。您可以在连接旧集群后,配置REPLICATION_SWITCH_TIME_RANGE来指定切换新旧集群的时间窗口。

说明

如果不配置新旧集群切换的时间窗口,旧集群中的增量数据全部实时同步到新集群后,新旧集群会自动切换。

SET ADB_CONFIG REPLICATION_SWITCH_TIME_RANGE=`23:00, 23:30`;

数仓版扩缩容

IN条件数限制

MAX_IN_ITEMS_COUNT

设置IN条件的个数限制,默认值:4000。取值范围为大于0的正整数。

SET ADB_CONFIG MAX_IN_ITEMS_COUNT=4000;

写入与查询

查询超时时间

QUERY_TIMEOUT

集群级别为所有查询配置查询的超时时间。取值范围为大于0的整数。单位:毫秒(ms)。

SET ADB_CONFIG QUERY_TIMEOUT=1000;

INSERT、UPDATE、DELETE超时时间

INSERT_SELECT_TIMEOUT

集群级别修改INSERT、UPDATE和DELETE语句的最大执行时间。默认值:24*360000,取值范围为大于0的整数。单位:毫秒(ms)。

SET ADB_CONFIG INSERT_SELECT_TIMEOUT=3600000;

使用限制

过滤条件不下推

  • 内核版本为3.1.4及以上:FILTER_NOT_PUSHDOWN_COLUMNS

  • 内核版本为3.1.4以下:NO_INDEX_COLUMNS

集群级别关闭特定字段的过滤条件下推能力。

  • 内核版本为3.1.4及以上:SET ADB_CONFIG FILTER_NOT_PUSHDOWN_COLUMNS=[Schema1.tableName1:colName1|colName2;Schema2.tableName2:colName1|colName2]

  • 内核版本为3.1.4以下:SET ADB_CONFIG NO_INDEX_COLUMNS=[tableName1.colName1;colName2,tableName2.colName1]

过滤条件不下推

查询执行模式

QUERY_TYPE

切换实例的查询执行模式,取值:

  • interactive

  • batch

说明

数仓版(3.0)预留模式集群、湖仓版(3.0)集群不支持切换实例的查询执行模式。

SET ADB_CONFIG QUERY_TYPE=interactive;

查询执行模式

查询队列

XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE

单个前端节点LOWEST队列的最大可运行查询数,默认值为20。

SET ADB_CONFIG XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE=20;

Interactive型资源组的优先级队列与并发控制

XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE

单个前端节点LOWEST队列的最大可排队查询数,默认值为200。

SET ADB_CONFIG XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE=200;

XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE

单个前端节点LOW队列的最大可运行查询数,默认值为20。

SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE=20;

XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE

单个前端节点LOW队列的最大可排队查询数,默认值为200。

SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE=200;

XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE

单个前端节点NORMAL队列的最大可运行查询数,默认值为20。

SET ADB_CONFIG XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE=20;

XIHE_ENV_QUERY_NORMAL_MAX_QUEUED_SIZE

单个前端节点NORMAL队列的最大可排队查询数,默认值为200。

SET ADB_CONFIG XIHE_ENV_QUERY_NORMAL_MAX_QUEUED_SIZE=200;

XIHE_ENV_QUERY_HIGH_MAX_CONCURRENT_SIZE

单个前端节点HIGH队列的最大可运行查询数,默认值为40。

SET ADB_CONFIG XIHE_ENV_QUERY_HIGH_MAX_CONCURRENT_SIZE=40;

XIHE_ENV_QUERY_HIGH_MAX_QUEUED_SIZE

单个前端节点HIGH队列的最大可排队查询数,默认值为400。

SET ADB_CONFIG XIHE_ENV_QUERY_HIGH_MAX_QUEUED_SIZE=400;

OSS外表导入

HIVE_SPLIT_ASYNC_GENERATION_ENABLED

Hive生成执行计划时,是否将Hive Split任务异步提交到队列中执行。取值:

  • true:是。

  • false(默认值):否。

说明

仅3.1.10.1及以上版本支持该参数。

SET ADB_CONFIG HIVE_SPLIT_ASYNC_GENERATION_ENABLED=true;

MaxCompute外表导入

SQL_OUTPUT_BATCH_SIZE

批量导入数据时的数据条数。取值范围为大于0的整数。

SET ADB_CONFIG SQL_OUTPUT_BATCH_SIZE = 6000;

导入与导出

ENABLE_ODPS_MULTI_PARTITION_PART_MATCH

是否预先遍历获取每个MaxCompute分区的记录数。

SET ADB_CONFIG ENABLE_ODPS_MULTI_PARTITION_PART_MATCH=false;

ASYNC_GET_SPLIT

MaxCompute生成执行计划时,是否通过优化Split加载性能,将任务异步提交到队列中执行。取值:

  • true:是。

  • false(默认值):否。

说明

仅3.1.10.1及以上版本支持该参数。

SET ADB_CONFIG ASYNC_GET_SPLIT=true;

BUILD自动调度时间

RC_CSTORE_BUILD_SCHEDULE_PERIOD

限制BUILD任务调度时间段,不限任务执行时间段。取值为0~24之间的整数。

SET ADB_CONFIG RC_CSTORE_BUILD_SCHEDULE_PERIOD=`6,8`;

配置BUILD自动调度时间

BUILD调度优先级

ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST

支持对单表或多表配置BUILD调度的优先级,且优先级一直生效,直至再次配置该表优先级时,才会改变。

BUILD调度的优先级由参数task_priority控制,取值为整数,默认值为0。

SET ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST = `<db1_name>.<table1_name>.<task_priority>;<db2_name>.<table2_name>.<task_priority>`;

BUILD

弹性导入

RC_ELASTIC_JOB_SCHEDULER_ENABLE

弹性导入数据时需手动打开弹性导入开关。

SET ADB_CONFIG RC_ELASTIC_JOB_SCHEDULER_ENABLE=true;

REMOTE_CALL函数

XIHE_REMOTE_CALL_SERVER_ENDPOINT

通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,函数计算服务的内网服务接入地址。详细信息,请参见服务接入地址

SET ADB_CONFIG XIHE_REMOTE_CALL_SERVER_ENDPOINT="1234567890000****.cn-zhangjiakou-internal.fc.aliyuncs.com"

自定义函数(邀测中)

XIHE_REMOTE_CALL_SERVER_AK

通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,函数计算服务所属阿里云账号或者RAM用户的AccessKey ID。

SET ADB_CONFIG XIHE_REMOTE_CALL_SERVER_AK=LTAI5t8sqJn5GhpBVtN8****;

XIHE_REMOTE_CALL_SERVER_SK

通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,函数计算服务所属阿里云账号或者RAM用户的AccessKey Secret。

SET ADB_CONFIG XIHE_REMOTE_CALL_SERVER_SK=HlClegbiV5mJjBYBJHEZQOnRF7****;

XIHE_REMOTE_CALL_COMPRESS_ENABLED

通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,是否使用GZIP格式压缩数据再传输至函数计算服务。

SET ADB_CONFIG REMOTE_CALL_COMPRESS_ENABLED=true;

XIHE_REMOTE_CALL_MAX_BATCH_SIZE

通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,向函数计算服务发送的数据行数。

SET ADB_CONFIG XIHE_REMOTE_CALL_MAX_BATCH_SIZE=500000;

常用Hint

类别

参数

描述

示例

文档链接

查询超时时间

QUERY_TIMEOUT

查询级别为单次查询配置查询的超时时间。取值范围为大于0的整数,单位:毫秒(ms)。

/*+ QUERY_TIMEOUT=1000 */select count(*) from t;

写入与查询

INSERT、UPDATE、DELETE超时时间

INSERT_SELECT_TIMEOUT

查询级别修改INSERT、UPDATE和DELETE语句的最大执行时间。默认值:24*3600000,取值范围为大于0的整数,单位:毫秒(ms)。

/*+ INSERT_SELECT_TIMEOUT=3600000 */update customer set customer_name ='adb' where customer_id ='2369';

使用限制

过滤条件不下推

  • 内核版本为3.1.4及以上:FILTER_NOT_PUSHDOWN_COLUMNS

  • 内核版本为3.1.4以下:NO_INDEX_COLUMNS

查询级别关闭特定字段的过滤条件下推能力。

  • 内核版本为3.1.4及以上:/*+ filter_not_pushdown_columns=[Schema1.table1:colName1|colName2;Schema2.table2:colName1|colName2] */

  • 内核版本为3.1.4以下:/*+ no_index_columns=[tableName1.colName1;colName2,tableName2.colName1] */

过滤条件不下推

BUILD调度优先级

build_task_priority

修改BUILD任务调度的优先级。目前只支持使用Hint对单表配置BUILD调度的优先级。默认值为0,取值范围为大于或等于0的整数,数值越大,BUILD任务调度的优先级越高。

/*build_task_priority = 2*/ BUILD TABLE db.table;

配置BUILD调度优先级

弹性导入

  • elastic_load

  • elastic_load_configs

选择弹性导入并配置执行弹性导入任务的Job型资源组。

/*elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/

SUBMIT JOB INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;

调整执⾏计划

  • 内核版本3.1.8及以上O_CBO_RULE_SWAP_OUTER_JOIN

  • 内核版本3.1.8及以下LEFT_TO_RIGHT_ENABLED

Hash Join的实现会以右表做BUILD,且Left Join不会做左右表的重新排序,在右表数据量很大时会造成执行慢、消耗过多内存资源等多个问题。您可以通过添加Hint指定优化器根据资源损耗把Left Join转为Right Join。取值:

  • true:开启。

  • false(默认值):关闭。

  • /*+O_CBO_RULE_SWAP_OUTER_JOIN=true*/

  • /*+LEFT_TO_RIGHT_ENABLED=true*/

Left join优化改写为Right join

reorder_joins

AnalyticDB MySQL默认开启自动调整Join顺序的功能,您可以根据查询的数据特征手动调整Join顺序,让查询直接根据SQL书写方式中的Join顺序来执行。取值:

  • true(默认值):开启自动调整Join顺序功能。

  • false:关闭自动调整Join顺序功能。

/*reorder_joins=false*/

手动调整Join顺序

aggregation_path_type

如果使用两步聚合方式,在分组聚合的分组数较多时,会消耗很多计算资源。您可以使用该Hint语句跳过局部聚合,直接进行最终聚合。取值:

  • single_agg:跳过局部聚合。

  • auto(默认值):优化器自动判断是否跳过局部聚合。

/*aggregation_path_type=single_agg*/

分组聚合查询优化

调整运⾏时策略

hash_partition_count

每个计算任务都会被切分成多个Task并发执行,充分利用计算资源。您可使用该Hint设置并发度。默认值为32,取值范围为大于0的整数。

/*hash_partition_count=32*/

task_writer_count

INSERT INTO SELECT导入任务的并发数,当Worker负载过高时,可修改该Hint降低并发数。默认值为16,取值范围为大于0的整数。

/*task_writer_count=8*/

cte_execution_mode

是否开启CTE执行优化。CTE执行优化功能开启后,CTE子查询被多次引用时,只执行一次,提升部分查询的查询性能。取值:

  • shared:开启CTE执行优化功能。

  • inline(默认值):关闭CTE执行优化功能。

/*cte_execution_mode=shared*/

WITH

查询条件限制

query_max_shuffle_data_size_mb

查询的Shuffle数据量。默认情况下,无论查询的数据量为多少,都不会触发报错。若设置了该参数,查询的数据量超过设定阈值后系统会直接终止查询并报错。取值范围为大于0的整数,单位为MB。

/*query_max_shuffle_data_size_mb=1024*/

max_select_items_count

设置SELECT条件的个数限制。默认值:1024,取值范围为大于0的整数。

/*max_select_items_count=2048*/

max_in_items_count

设置IN条件的个数限制。默认值:4000,取值范围为大于0的整数。

/*max_in_items_count=1000*/

max_where_items_count

设置WHERE条件的个数限制。默认值:256,取值范围为大于0的整数。

/*max_where_items_count=512*/

OSS外表

output_filename

通过OSS外表导出数据时,可以在导出语句前添加该Hint,自定义存储在OSS中的文件名称。

/*output_filename=output.csv*/

导出至OSS

sql_output_oss_file_head_enable

通过OSS外表导出数据时,导出到OSS中的数据文件默认不带列名,只有数据。若您想导出带列名的文件,请在导入语句前添加该Hint。取值:

  • true:是。

  • false(默认值):否。

/*sql_output_oss_file_head_enable=true*/

hive_split_async_generation_enabled

Hive生成执行计划时,是否将Hive Split任务异步提交到队列中执行。取值:

  • true:是。

  • false(默认值):否。

说明

仅3.1.10.1及以上版本支持该参数。

/*hive_split_async_generation_enabled=true*/

通过外表导入至湖仓版

fast_parquet_reader_enable

当Parquet文件中的统计信息有误时,

是否回退到原生的Parquet reader。

  • true(默认值):是。

  • false:否。

/*fast_parquet_reader_enable=true*/

oss_vectorized_parquet_reader_enable

在数据中没有NULL值的情况下,是否开启Parquet向量化读开关。取值:

  • true:是。

  • false(默认值):否。

/*oss_vectorized_parquet_reader_enable=true*/

oss_vectorized_parquet_reader_null_scene_enable

在数据中有NULL值的情况下,是否开启Parquet向量化读开关。取值:

  • true:是。

  • false(默认值):否。

/*oss_vectorized_parquet_reader_null_scene_enable=true*/

hudi_metadata_table_enabled

是否加载Hudi的元数据信息。取值:

  • true:是。

  • false(默认值):否。

/*hudi_metadata_table_enabled=true*/

hudi_query_type

设置查询Hudi表的方式。取值:

  • snapshot:查询指定时间所有提交或压缩后的数据。

  • read_optimized(默认值):查询最后一次提交或压缩之后的数据。

/*hudi_query_type=snapshot*/

hudi_realtime_skip_merge

快照查询Hudi表数据时,是否跳过基本文件和日志文件的记录合并。取值:

  • true:是。

  • false(默认值):否。

/*hudi_realtime_skip_merge=true*/

hudi_max_split_size

最大Split的大小。默认值为128。单位:MB。

/*hudi_max_split_size=128*/

hudi_split_parallel_generation_enabled

是否并行生成Split。取值:

  • true(默认值):是。

  • false:否。

/*hudi_split_parallel_generation_enabled=true*/

hudi_data_skipping_enabled

在读取数据时,使用Hudi MetaTable表中的统计信息跳过不需要读取的分片,提升查询性能。取值:

  • true:是。

  • false(默认值):否。

/*hudi_data_skipping_enabled=true*/

hudi_split_async_generation_enabled

在生成执行计划的阶段,是否异步生成Hudi Split。取值:

  • true(默认值):是。

  • false:否。

/*hudi_split_async_generation_enabled=true*/

RDS MySQL外表

jdbc_scan_splits

通过JDBC执行TableScan时的Split个数。默认值为1,取值范围为1~100。

/*jdbc_scan_splits=1*/

通过外表导入至湖仓版

jdbc_split_column

读取RDS MySQL外表时,切分Split的列。

/*jdbc_split_column=column1*/

jdbc_insert_directly

RDS MySQL外表写数据时,默认先写入临时表,再写入目标表。您可以通过修改Hint直接将数据写入目标表,但是在写入过程中,出现任何报错,会导致目标表中有脏数据。取值:

  • true:是。

  • false(默认值):否。

/*jdbc_insert_directly=true*/

Tablestore外表

ots-insert-as-update

是否使用INSERT语句代替UPDATE语句。取值:

  • true:是。

  • false(默认值):否。

/*ots-insert-as-update=true*/

表格存储(Tablestore)数据导入

MaxCompute外表

odps_split_limit

通过Tunnel读取数据时,最多切分Split的数量。默认值为1000,取值范围为1~1000。

/*odps_split_limit=1000*/

通过外表导入至湖仓版

ignore_partition_cache

执行带有分区条件的查询时,不使用缓存的分区元数据信息,而是从MaxCompute表中直接查询分区元数据。

  • true:是。

  • false(默认值):否。

/*ignore_partition_cache=true*/

rows_per_split

通过Tunnel读取数据时,单个Split的最大读取的数据行数。默认值为500000,取值范围为10000~500000。

/*rows_per_split=500000*/

storage_api_enabled

是否使用MaxCompute Storage API读取MaxCompute数据。MaxCompute Storage API相比传统的Tunnel读取性能有很大提升。

取值:

  • true:是。

  • false(默认值):否。

/*storage_api_enabled=true*/

split_byte_size

通过MaxCompute Storage API读取数据时,单个Split的最大值。默认值为256,单位:MB。

/*split_byte_size=256*/

max_batch_row_count

通过MaxCompute Storage API读取数据时,单个Split的最大行数。默认值为1024。

/*max_batch_row_count=1024*/

page_batch_size

通过MaxCompute Storage API读取数据时,每个Page所包含的最大行数。默认值为1024。

/*page_batch_size=1024*/

max_allocation_per_split

通过MaxCompute Storage API读取数据时,Split级别分配的最大峰值内存。默认值为300 MB,单位:MB。

/*max_allocation_per_split=300*/

async_get_split

MaxCompute生成执行计划时,是否通过优化Split加载性能,将任务异步提交到队列中执行。取值:

  • true:是。

  • false(默认值):否。

说明

仅3.1.10.1及以上版本支持该参数。

/*+async_get_split=true*/

其他

resource_group

指定查询所使⽤的资源组。若不指定资源组,默认使用数据库账号绑定的资源组。数据库账号未绑定资源组时,则使用默认资源组。

/*resource_group=my_group_name*/

dml_exception_to_null_enabled

INSERT SELECT语句写入的数据出现非法值,是否抛出异常。取值:

  • true:不抛出异常,写入NULL值。

  • false(默认值):抛出异常。

/*dml_exception_to_null_enabled=true*/

display_hint

⽤于标记相应的查询,例如来自于不同的业务方,便于识别。

/*display_hint=from_user_123*/

  • 本页导读 (1)
文档反馈