Config和Hint配置参数
AnalyticDB for MySQL支持通过SET命令(语法:SET ADB_CONFIG KEY=VALUE)和Hint(语法:/*+ KEY=VALUE*/)两种方式配置参数。其中,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条件的个数限制。取值范围为大于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。  | 
  | ||
XIHE BSP作业优先级  | QUERY_PRIORITY  | BSP作业的优先级。取值: 
  | 
  | |
XIHE BSP作业使用的最大ACU数  | ELASTIC_JOB_MAX_ACU  | 单个XIHE BSP作业所使用的最大ACU数。默认值是9,最小值为3,取值范围 为[3,Job型资源组最大资源量]。  | 
  | |
XIHE BSP作业查询超时时间  | BATCH_QUERY_TIMEOUT  | XIHE BSP作业的超时时间。默认值是7200000 ms,取值范围为大于0的整数。单位:毫秒(ms)。  | 
  | |
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,扫描并发额度过大或过小都会影响集群性能,建议您不要修改默认值。  | 
  | ||
逻辑视图大小写敏感  | VIEW_OUTPUT_NAME_CASE_SENSITIVE  | 设置逻辑视图大小写敏感。取值如下: 
  | 
  | |
连续执行多个SQL语句  | ALLOW_MULTI_QUERIES  | 使用Multi-Statement功能连续执行多个SQL语句时,手动开启Multi-Statement功能。取值如下: 
  | 
  | |
开启Binlog  | BINLOG_ENABLE  | 
  | 
  | |
Paging Cache(深分页性能优化)  | PAGING_CACHE_SCHEMA  | 指定存储分页查询临时缓存表的数据库。若未指定,则使用当前连接的内部数据库。  | 
  | |
PAGING_CACHE_MAX_TABLE_COUNT  | 设置临时缓存表的最大个数限制。超过此数量时创建新的缓存将失败。默认值:100,取值范围为大于0的整数。  | 
  | ||
PAGING_CACHE_EXPIRATION_TIME  | 指定缓存的过期时间阈值,自动清理指定时间内未访问的分页查询缓存。默认值:600,取值范围为大于0的整数,单位:秒(s)。  | 
  | ||
PAGING_CACHE_ENABLE  | 指定是否全局关闭Paging Cache功能。取值如下: 
  | 
  | ||
指定表引擎  | RC_DDL_ENGINE_REWRITE_XUANWUV2  | 在集群全局指定表引擎。取值: 
  | 
  | 
常用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的整数。  | 
  | ||
XIHE BSP作业优先级  | QUERY_PRIORITY  | BSP作业的优先级。取值: 
  | 
  | |
XIHE BSP作业使用的最大ACU数  | ELASTIC_JOB_MAX_ACU  | 单个XIHE BSP作业所使用的最大ACU数。默认值为9,最小值为3,取值范围 为[3,Job型资源组最大资源量]。  | 
  | |
XIHE BSP作业查询超时时间  | BATCH_QUERY_TIMEOUT  | XIHE BSP作业的超时时间。默认值是7200000 ms,取值范围为大于0的整数。单位:毫秒(ms)。  | 
  | |
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读取性能有很大提升。 取值: 
  | 
  | ||
APLIT_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,取值范围大于  | 
  | ||
Paging Cache(深分页性能优化)  | PAGING_ID  | 启用Paging Cache功能,并手动指定  | 
  | |
PAGING_CACHE_ENABLED  | 启用Paging Cache功能,并根据SQL Pattern自动生成 
  | 
  | ||
PAGING_CACHE_VALIDITY_INTERVAL  | 设置缓存有效时间,超过该时间后缓存将失效。若缓存在失效后一个小时内未被访问,系统将自动删除对应的临时缓存表。取值范围为大于0的整数,单位:秒(s)。此参数需与  | 
  | ||
INVALIDATE_PAGING_CACHE  | 是否清理指定Pattern的分页查询缓存。取值如下: 
 此参数需与  | 
  | ||
指定表引擎  | RC_DDL_ENGINE_REWRITE_XUANWUV2  | 指定当前SQL所创建的表的引擎。取值: 
  | 
  | |
其他  | RESOURCE_GROUP  | 指定查询所使⽤的资源组。若不指定资源组,默认使用数据库账号绑定的资源组。数据库账号未绑定资源组时,则使用默认资源组。  | 
  | 无  | 
DML_EXCEPTION_TO_NULL_ENABLED  | INSERT SELECT语句写入的数据出现非法值,是否抛出异常。取值: 
  | 
  | ||
DISPLAY_HINT  | ⽤于标记相应的查询,例如来自于不同的业务方,便于识别。  | 
  | 
常见问题
如何删除ADB_CONFIG的某个配置?
如果通过SET ADB_CONFIG key=value;设置了某个配置参数的值,现在想将这个配置参数恢复到默认值,可以采用以下方法。
方法  | 示例  | 
 |  | 
上述命令执行成功后,可以通过SHOW ADB_CONFIG KEY=key;,确认配置参数已恢复到默认值。