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来指定切换新旧集群的时间窗口。 说明 如果不配置新旧集群切换的时间窗口,旧集群中的增量数据全部实时同步到新集群后,新旧集群会自动切换。 |
| |
IN条件数限制 | MAX_IN_ITEMS_COUNT | 设置IN条件的个数限制,默认值:4000。取值范围为大于0的正整数。 |
| |
查询超时时间 | QUERY_TIMEOUT | 集群级别为所有查询配置查询的超时时间。取值范围为大于0的整数。单位:毫秒(ms)。 |
| |
INSERT、UPDATE、DELETE超时时间 | INSERT_SELECT_TIMEOUT | 集群级别修改INSERT、UPDATE和DELETE语句的最大执行时间。默认值:24*3600000,取值范围为大于0的整数。单位:毫秒(ms)。 |
| |
过滤条件不下推 |
| 集群级别关闭特定字段的过滤条件下推能力。 |
| |
查询执行模式 | QUERY_TYPE | 切换实例的查询执行模式,取值:
说明 数仓版预留模式集群、企业版、基础版及湖仓版集群不支持切换实例的查询执行模式。 |
| |
查询队列 | XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE | 单个前端节点LOWEST队列的最大可运行查询数,默认值为20。 |
| |
XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE | 单个前端节点LOWEST队列的最大可排队查询数,默认值为200。 |
| ||
XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE | 单个前端节点LOW队列的最大可运行查询数,默认值为20。 |
| ||
XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE | 单个前端节点LOW队列的最大可排队查询数,默认值为200。 |
| ||
XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE | 单个前端节点NORMAL队列的最大可运行查询数,默认值为20。 |
| ||
XIHE_ENV_QUERY_NORMAL_MAX_QUEUED_SIZE | 单个前端节点NORMAL队列的最大可排队查询数,默认值为200。 |
| ||
XIHE_ENV_QUERY_HIGH_MAX_CONCURRENT_SIZE | 单个前端节点HIGH队列的最大可运行查询数,默认值为40。 |
| ||
XIHE_ENV_QUERY_HIGH_MAX_QUEUED_SIZE | 单个前端节点HIGH队列的最大可排队查询数,默认值为400。 |
| ||
OSS外表导入 | HIVE_SPLIT_ASYNC_GENERATION_ENABLED | Hive生成执行计划时,是否将Hive Split任务异步提交到队列中执行。取值:
说明 仅3.1.10.1及以上版本支持该参数。 |
| |
MaxCompute外表导入 | SQL_OUTPUT_BATCH_SIZE | 批量导入数据时的数据条数。取值范围为大于0的整数。 |
| |
ENABLE_ODPS_MULTI_PARTITION_PART_MATCH | 是否预先遍历获取每个MaxCompute分区的记录数。 |
| ||
ASYNC_GET_SPLIT | MaxCompute生成执行计划时,是否通过优化Split加载性能,将任务异步提交到队列中执行。取值:
说明 仅3.1.10.1及以上版本支持该参数。 |
| ||
BUILD自动调度时间 | RC_CSTORE_BUILD_SCHEDULE_PERIOD | 限制BUILD任务调度时间段,不限任务执行时间段。取值为0~24之间的整数。 |
| |
BUILD调度优先级 | ADB_CONFIG RC_BUILD_TASK_PRIORITY_LIST | 支持对单表或多表配置BUILD调度的优先级,且优先级一直生效,直至再次配置该表优先级时,才会改变。 BUILD调度的优先级由参数 |
| |
弹性导入 | RC_ELASTIC_JOB_SCHEDULER_ENABLE | 弹性导入数据时需手动打开弹性导入开关。 |
| |
REMOTE_CALL函数 | XIHE_REMOTE_CALL_SERVER_ENDPOINT | 通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,函数计算服务的内网服务接入地址。详细信息,请参见服务接入地址。 |
| |
XIHE_REMOTE_CALL_SERVER_AK | 通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,函数计算服务所属阿里云账号或者RAM用户的AccessKey ID。 |
| ||
XIHE_REMOTE_CALL_SERVER_SK | 通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,函数计算服务所属阿里云账号或者RAM用户的AccessKey Secret。 |
| ||
XIHE_REMOTE_CALL_COMPRESS_ENABLED | 通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,是否使用GZIP格式压缩数据再传输至函数计算服务。 |
| ||
XIHE_REMOTE_CALL_MAX_BATCH_SIZE | 通过REMOTE_CALL函数远程调用函数计算服务中自定义的函数时,向函数计算服务发送的数据行数。 |
| ||
扫描并发控制 | ADB_CONFIG SPLIT_FLOW_CONTROL_ENABLED | AnalyticDB for MySQL支持配置扫描并发额度,避免因查询的扫描并发过大、占用过多资源,导致节点不稳定的情况。取值如下:
|
| |
ADB_CONFIG NODE_LEVEL_SPLIT_FLOW_CONTROL_ENABLED | AnalyticDB for MySQL支持根据节点整体的扫描并发额度,动态调整Task的扫描并发额度。取值如下:
|
| ||
MIN_RUNNING_SPLITS_LIMIT_PER_TASK | Task扫描并发额度的最小值。默认值为1,取值范围为[ |
| ||
TARGET_RUNNING_SPLITS_LIMIT_PER_TASK | Task扫描并发额度的中间值,基于该值增加或降低扫描并发额度。默认值为32,取值范围为[ |
| ||
MAX_RUNNING_SPLITS_LIMIT_PER_TASK | Task扫描并发额度的最大值。默认值为64,取值范围大于 |
| ||
ADB_CONFIG WORKER_MAX_RUNNING_SOURCE_SPLITS_PER_NODE | 存储节点的扫描并发额度默认为256,扫描并发额度过大或过小都会影响集群性能,建议您不要修改默认值。 |
| ||
ADB_CONFIG EXECUTOR_MAX_RUNNING_SOURCE_SPLITS_PER_NODE | 计算节点的扫描并发额度默认为256,扫描并发额度过大或过小都会影响集群性能,建议您不要修改默认值。 |
|
常用Hint
类别 | 参数 | 描述 | 示例 | 文档链接 |
查询超时时间 | QUERY_TIMEOUT | 查询级别为单次查询配置查询的超时时间。取值范围为大于0的整数,单位:毫秒(ms)。 |
| |
INSERT、UPDATE、DELETE超时时间 | INSERT_SELECT_TIMEOUT | 查询级别修改INSERT、UPDATE和DELETE语句的最大执行时间。默认值:24*3600000,取值范围为大于0的整数,单位:毫秒(ms)。 |
| |
过滤条件不下推 |
| 查询级别关闭特定字段的过滤条件下推能力。 |
| |
BUILD调度优先级 | build_task_priority | 修改BUILD任务调度的优先级。目前只支持使用Hint对单表配置BUILD调度的优先级。默认值为0,取值范围为大于或等于0的整数,数值越大,BUILD任务调度的优先级越高。 |
| |
弹性导入 |
| 选择弹性导入并配置执行弹性导入任务的Job型资源组。 |
| |
调整执⾏计划 |
| Hash Join的实现会以右表做BUILD,且Left Join不会做左右表的重新排序,在右表数据量很大时会造成执行慢、消耗过多内存资源等多个问题。您可以通过添加Hint指定优化器根据资源损耗把Left Join转为Right Join。取值:
|
| |
reorder_joins | AnalyticDB for MySQL默认开启自动调整Join顺序的功能,您可以根据查询的数据特征手动调整Join顺序,让查询直接根据SQL书写方式中的Join顺序来执行。取值:
|
| ||
aggregation_path_type | 如果使用两步聚合方式,在分组聚合的分组数较多时,会消耗很多计算资源。您可以使用该Hint语句跳过局部聚合,直接进行最终聚合。取值:
|
| ||
调整运⾏时策略 | hash_partition_count | 每个计算任务都会被切分成多个Task并发执行,充分利用计算资源。您可使用该Hint设置并发度。默认值为32,取值范围为大于0的整数。 |
| 无 |
task_writer_count | INSERT INTO SELECT导入任务的并发数,当Worker负载过高时,可修改该Hint降低并发数。默认值为16,取值范围为大于0的整数。 |
| ||
cte_execution_mode | 是否开启CTE执行优化。CTE执行优化功能开启后,CTE子查询被多次引用时,只执行一次,提升部分查询的查询性能。取值:
|
| ||
查询条件限制 | query_max_shuffle_data_size_mb | 查询的Shuffle数据量。默认情况下,无论查询的数据量为多少,都不会触发报错。若设置了该参数,查询的数据量超过设定阈值后系统会直接终止查询并报错。取值范围为大于0的整数,单位为MB。 |
| 无 |
max_select_items_count | 设置SELECT条件的个数限制。默认值:1024,取值范围为大于0的整数。 |
| ||
max_in_items_count | 设置IN条件的个数限制。默认值:4000,取值范围为大于0的整数。 |
| ||
max_where_items_count | 设置WHERE条件的个数限制。默认值:256,取值范围为大于0的整数。 |
| ||
OSS外表 | output_filename | 通过OSS外表导出数据时,可以在导出语句前添加该Hint,自定义存储在OSS中的文件名称。 |
| |
sql_output_oss_file_head_enable | 通过OSS外表导出数据时,导出到OSS中的数据文件默认不带列名,只有数据。若您想导出带列名的文件,请在导入语句前添加该Hint。取值:
|
| ||
hive_split_async_generation_enabled | Hive生成执行计划时,是否将Hive Split任务异步提交到队列中执行。取值:
说明 仅3.1.10.1及以上版本支持该参数。 |
| ||
fast_parquet_reader_enable | 当Parquet文件中的统计信息有误时, 是否回退到原生的Parquet reader。
|
| ||
oss_vectorized_parquet_reader_enable | 在数据中没有NULL值的情况下,是否开启Parquet向量化读开关。取值:
|
| ||
oss_vectorized_parquet_reader_null_scene_enable | 在数据中有NULL值的情况下,是否开启Parquet向量化读开关。取值:
|
| ||
hudi_metadata_table_enabled | 是否加载Hudi的元数据信息。取值:
|
| ||
hudi_query_type | 设置查询Hudi表的方式。取值:
|
| ||
hudi_realtime_skip_merge | 快照查询Hudi表数据时,是否跳过基本文件和日志文件的记录合并。取值:
|
| ||
hudi_max_split_size | 最大Split的大小。默认值为128。单位:MB。 |
| ||
hudi_split_parallel_generation_enabled | 是否并行生成Split。取值:
|
| ||
hudi_data_skipping_enabled | 在读取数据时,使用Hudi MetaTable表中的统计信息跳过不需要读取的分片,提升查询性能。取值:
|
| ||
hudi_split_async_generation_enabled | 在生成执行计划的阶段,是否异步生成Hudi Split。取值:
|
| ||
RDS MySQL外表 | jdbc_scan_splits | 通过JDBC执行TableScan时的Split个数。默认值为1,取值范围为1~100。 |
| |
jdbc_split_column | 读取RDS MySQL外表时,切分Split的列。 |
| ||
jdbc_insert_directly | RDS MySQL外表写数据时,默认先写入临时表,再写入目标表。您可以通过修改Hint直接将数据写入目标表,但是在写入过程中,出现任何报错,会导致目标表中有脏数据。取值:
|
| ||
Tablestore外表 | ots-insert-as-update | 是否使用INSERT语句代替UPDATE语句。取值:
|
| |
MaxCompute外表 | odps_split_limit | 通过Tunnel读取数据时,最多切分Split的数量。默认值为1000,取值范围为1~1000。 |
| |
ignore_partition_cache | 执行带有分区条件的查询时,不使用缓存的分区元数据信息,而是从MaxCompute表中直接查询分区元数据。
|
| ||
rows_per_split | 通过Tunnel读取数据时,单个Split的最大读取的数据行数。默认值为500000,取值范围为10000~500000。 |
| ||
storage_api_enabled | 是否使用MaxCompute Storage API读取MaxCompute数据。MaxCompute Storage API相比传统的Tunnel读取性能有很大提升。 取值:
|
| ||
split_byte_size | 通过MaxCompute Storage API读取数据时,单个Split的最大值。默认值为256,单位:MB。 |
| ||
max_batch_row_count | 通过MaxCompute Storage API读取数据时,单个Split的最大行数。默认值为1024。 |
| ||
page_batch_size | 通过MaxCompute Storage API读取数据时,每个Page所包含的最大行数。默认值为1024。 |
| ||
max_allocation_per_split | 通过MaxCompute Storage API读取数据时,Split级别分配的最大峰值内存。默认值为300 MB,单位:MB。 |
| ||
async_get_split | MaxCompute生成执行计划时,是否通过优化Split加载性能,将任务异步提交到队列中执行。取值:
说明 仅3.1.10.1及以上版本支持该参数。 |
| ||
扫描并发控制 | SPLIT_FLOW_CONTROL_ENABLED | AnalyticDB for MySQL支持配置扫描并发额度,避免因查询的扫描并发过大、占用过多资源,导致节点不稳定的情况。取值如下:
|
| |
MIN_RUNNING_SPLITS_LIMIT_PER_TASK | Task扫描并发额度的最小值。默认值为1,取值范围为[ |
| ||
TARGET_RUNNING_SPLITS_LIMIT_PER_TASK | Task扫描并发额度的中间值,基于该值增加或降低扫描并发额度。默认值为32,取值范围为[ |
| ||
MAX_RUNNING_SPLITS_LIMIT_PER_TASK | Task扫描并发额度的最大值。默认值为64,取值范围大于 |
| ||
其他 | resource_group | 指定查询所使⽤的资源组。若不指定资源组,默认使用数据库账号绑定的资源组。数据库账号未绑定资源组时,则使用默认资源组。 |
| 无 |
dml_exception_to_null_enabled | INSERT SELECT语句写入的数据出现非法值,是否抛出异常。取值:
|
| ||
display_hint | ⽤于标记相应的查询,例如来自于不同的业务方,便于识别。 |
|