基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
全局 Hint 类型下的其他 Hint
更新时间:2026-07-15 22:01:30
全局 Hint 类型下的其他 Hint 允许开发者和数据库管理员对 SQL 语句的执行进行细粒度的控制。所支持的其他类型 Hint 如下:
| Hint 名称 | 解释 |
|---|---|
APPEND |
INSERT 的同时收集统计信息;INSERT INTO SELECT 中开启旁路模式(DIRECT INSERT)。 |
CURSOR_SHARING_EXACT |
控制查询是否参数化。 |
DIRECT |
指定启用旁路导入功能,且仅在 LOAD DATA 中使用。 |
DISABLE_PARALLEL_DML |
禁用 并行 DML。 |
ENABLE_PARALLEL_DML |
启用 并行 DML。 |
DYNAMIC_SAMPLING |
开启动态采样。 |
FROZEN_VERSION |
指定读取特定版本数据。 |
LOAD_BATCH_SIZE |
用于指定每次插入的批量大小,且仅在 LOAD DATA 中使用。 |
LOG_LEVEL |
用于指定当前查询在执行过程中记录的日志级别。 |
MAX_CONCURRENT |
设置查询允许最大并发数。 |
MONITOR |
用于对查询开启捕获查询执行 SQL Plan Monitor 记录。 |
OPT_PARAM |
设置查询级别优化器相关参数。 |
PARALLEL |
设置查询级别并行度。它的反向操作为 NO_PARALLEL。 |
NO_PARALLEL |
关闭查询并行 (即设置并行度为 1)。 |
QUERY_TIMEOUT |
设置查询执行超时时间。 |
READ_CONSISTENCY |
读一致性级别设置(强/弱)。 |
STAT |
追踪查询算子输出统计 。 |
TRANS_PARAM |
设置查询级别事务相关变量值。 |
TRACING |
追踪查询执行算子输出。 |
USE_PLAN_CACHE |
用于指定当前查询的计划缓存(Plan Cache)使用策略。 |
APPEND Hint
APPEND Hint 指定 INSERT INTO SELECT 开启旁路导入功能。更多信息,参见使用 INSERT INTO SELECT 语句旁路导入数据。
语法
/*+ APPEND */
示例
INSERT /*+ append enable_parallel_dml parallel(16) */ INTO t2
SELECT * FROM t1;
CURSOR_SHARING_EXACT Hint
CURSOR_SHARING_EXACT Hint 用于指定查询级别禁止参数化。
OceanBase 数据库支持使用绑定变量替换 SQL 语句中的字面量,此功能由 CURSOR_SHARING 变量控制,即当cursor_sharing='exact' 时,不需要参数化。详细信息,请参见 cursor_sharing。
语法
/*+ CURSOR_SHARING_EXACT */
示例
下方的查询示例中,使用 CURSOR_SHARING_EXACT Hint 禁止参数化,使用两组参数执行 4 次后,PLAN CACHE 中对不同参数生成了两个查询计划。
alter system flush plan cache global;
SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=5;
SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=5;
SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=6;
SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=6;
SELECT sql_id, plan_id, statement FROM oceanbase.gv$ob_plan_cache_plan_stat where query_sql like "SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=%";
+----------------------------------+---------+---------------------------------------------------------+
| sql_id | plan_id | statement |
+----------------------------------+---------+---------------------------------------------------------+
| E024EB33213BF501D4CA7ABB81A195B5 | 13249 | SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=5 |
| E024EB33213BF501D4CA7ABB81A195B5 | 13250 | SELECT /*+ CURSOR_SHARING_EXACT */ * FROM t1 WHERE c1=6 |
+----------------------------------+---------+---------------------------------------------------------+
DIRECT Hint
DIRECT Hint 在 LOAD DATA 中指定启用旁路导入功能。
LOAD DATA 中使用 DIRECT Hint 开启旁路导入功能示例如下,详细介绍详见 LOAD DATA。
语法
/*+ DIRECT ( need_sort, int_num ) */
参数解释
DIRECT Hint 中的参数释义如下:
need_sort参数表示给定的 CSV 文件是否需要排序。int_num给定最大容忍的错误行数。
示例
LOAD DATA
/*+ PARALLEL(1) DIRECT(FALSE, 0) */
REMOTE_OSS INFILE 'oss://antsys-oceanbasebackup/backup_rd/xiaotao.ht/lineitem2.tbl?host=***.oss-cdn.***&access_id=***&access_key=***'
INTO TABLE lineitem
FIELDS TERMINATED BY '|'
ENCLOSED BY ''
LINES STARTING BY ''
TERMINATED BY '\n';
DYNAMIC_SAMPLING Hint
DYNAMIC_SAMPLING Hint 指定查询是否开启动态采样。
语法
/*+ DYNAMIC_SAMPLING ( 0 | 1 ) */
参数解释
DYNAMIC_SAMPLING Hint 中的参数释义如下::
- 参数为 0 时禁止动态采样。
- 参数为 1 时开启动态采样。
示例
下方的查询示例中,使用 DYNAMIC_SAMPLING Hint 开启动态采样。
SELECT /*+ dynamic_sampling(1) */ *
FROM t1 WHERE c1 LIKE "%abc%" AND c2 LIKE "%abc%";
ENABLE_PARALLEL_DML Hint
ENABLE_PARALLEL_DML Hint 指定当前查询开启并行 DML,其反向 Hint 为 DISABLE_PARALLEL_DML,用于禁止并行 DML。
详细信息,参见 并行 DML。
语法
/*+ ENABLE_PARALLEL_DML */
示例
下方的查询示例中,使用 ENABLE_PARALLEL_DML Hint 开启 PDML。
INSERT /*+ enable_parallel_dml parallel(8) */ INTO t2 SELECT * FROM t1;
DISABLE_PARALLEL_DML Hint
DISABLE_PARALLEL_DML Hint 禁用当前查询开启并行 DML,其反向 Hint 为 ENABLE_PARALLEL_DML,用于启用并行 DML。
详细信息,参见 并行 DML。
语法
/*+ DISABLE_PARALLEL_DML */
示例
下方的查询示例中,使用 DISABLE_PARALLEL_DML Hint 禁用 PDML。
INSERT /*+ disable_parallel_dml parallel(8) */ INTO t2 SELECT * FROM t1;
FROZEN_VERSION Hint
FROZEN_VERSION Hint 指定当前查询读取特定版本的数据。
语法
/*+ FROZEN_VERSION ( intnum ) */
参数解释
intnum:指定需要读取数据的版本。
示例
下方查询示例,通过 FROZEN_VERSION Hint 指定读取数据版本,表示查询操作将在数据版本号 1000 上执行。
SELECT /*+ FROZEN_VERSION(1000) */ *
FROM employees e
WHERE e.department_id = 1001;
LOAD_BATCH_SIZE Hint
LOAD_BATCH_SIZE Hint 在 LOAD DATA 中用于指定每次插入的批量记录的大小。
LOAD_BATCH_SIZE Hint 中 batch_size 指定每次插入批量记录的大小。 LOAD DATA 相关介绍可以查看 LOAD DATA 介绍。
语法
/*+ LOAD_BATCH_SIZE ( batch_size ) */
示例
-- 使用 4 个并行进程来导入数据,将新数据追加到表的末尾,并且通过 `LOAD_BATCH_SIZE` Hint 设定每个批次处理 1000 条记录
LOAD DATA /*+ PARALLEL(4) APPEND LOAD_BATCH_SIZE(1000) */
INFILE '/home/admin/test.csv' INTO TABLE t1;
LOG_LEVEL Hint
LOG_LEVEL Hint 用于指定当前查询在执行过程中记录的日志级别。
LOG_LEVEL Hint 参数中 log_level指定日志级别, 常用的日志级别包括 ERROR/WARN/INFO/TRACE/DEBUG。
更多关于日志级别的释义,参见日志级别。
语法
/*+ LOG_LEVEL ( [']log_level['] ) */
示例
--使用 LOG_LEVEL Hint 指定使用 `TRACE` 级别日志。
SELECT /*+ LOG_LEVEL(TRACE) */ *
FROM employees e
WHERE e.department_id = 1001;
MAX_CONCURRENT Hint
MAX_CONCURRENT Hint 用于指定查询执行的最大并发数。
MAX_CONCURRENT Hint 中参数 intnum 为指定的查询允许的最大并发数。当查询并发数超出允许的最大并发数时,查询执行会报错到达最大并发数。当 intnum 指定为 0 时,查询执行总是报错。
需要注意的是,目前 MAX_CONCURRENT Hint 无法直接使用在查询中,只能够创建仅包含 MAX_CONCURRENT Hint 的 outline 用于查询限流,对特定 SQL_ID 使用 MAX_CONCURRENT 进行限流。
语法
/*+ MAX_CONCURRENT ( intnum ) */
示例
-- 此查询创建了 Outline otl1 关联到标识符为 'EC102CB006383D732BC98797601D9B3B' 的查询,并且指定了对应查询的最大并发执行数为 10
CREATE OUTLINE otl1 ON 'EC102CB006383D732BC98797601D9B3B'
USING HINT /*+ max_concurrent(10) */;
MONITOR Hint
MONITOR Hint 用于对查询开启捕获查询执行 SQL Plan Monitor 记录,您可以使用 MONITOR Hint 将其执行过程记录在 SQL Plan Monitor 中。
对于没有开启并行执行的查询,OceanBase 则不会将其执行过程记录在 SQL Plan Monitor 中。
SQL Plan Monitor 相关介绍见 实时执行计划展示 中实时 SQL Plan Monitor 章节。
语法
/*+ MONITOR */
示例
-- 使用 MONITOR Hint 开启 SQL Plan Monitor 记录。
SELECT /*+monitor*/ c1, SUM(distinct c2) FROM t1 GROUP BY c1;
NO_PARALLEL Hint
NO_PARALLEL Hint 指定关闭查询并行 (即设置并行度为 1)。其反向 Hint 是 PARALLEL Hint。
NO_PARALLEL Hint 与 /*+ parallel(1)*/ 等价。
语法
/*+ NO_PARALLEL */
示例
下方的查询示例中,使用 NO_PARALLEL Hint 关闭查询并行。
SELECT /*+ no_parallel */ c1, sum(distinct c2) FROM t1 GROUP BY c1;
NO_QUERY_TRANSFORMATION Hint
NO_QUERY_TRANSFORMATION Hint 禁止对当前查询进行任何查询改写。
需要注意的是,区别于 Query Block Hint 中的 NO_REWRITE Hint,使用 NO_QUERY_TRANSFORMATION 无法使用 Query Block Hint 开启一些改写。
有关查询改写,参见查询改写概述。
语法
/*+ NO_QUERY_TRANSFORMATION */
示例
下方的查询示例中,使用 NO_QUERY_TRANSFORMATION Hint 禁止任何查询改写。
SELECT /*+ NO_QUERY_TRANSFORMATION */ *
FROM (SELECT * FROM t1) v WHERE v.c1 = 3;
OPT_PARAM Hint
OPT_PARAM Hint 指定在查询级别更新一些优化器相关的配置项/系统变量。
语法
/*+ OPT_PARAM ( param_name, param_value) */
参数解释
param_name:指定配置项/系统变量名。当前仅支持workarea_size_policy。param_value:指定需要指定的变量值。
示例
下方的查询示例中,使用 OPT_PARAM Hint 指定 workarea_size_policy 值对当前查询设置手动调整 SQL 工作区大小的策略。
SELECT /*+ opt_param('workarea_size_policy', 'manule') */ *
FROM t1
where c1 in (1,2,3,4,5,...,1000)
and c2 in (1,2,3,4,5,...,1000);
PARALLEL Hint
PARALLEL Hint 作为全局 Hint 时可以指定当前查询使用的并行度或并行开启策略。
PARALLEL Hint 除了作为全局 Hint 外,还可以作为查询块 Hint 指定表级别的并行度,详见 Access Path Hints 中 Parallel hint 相关内容。
语法
/*+ PARALLEL ( AUTO | MANUAL | parallel_degree) */
参数解释
AUTO或MANUAL:PARALLELHint 中使用AUTO或MANUAL作为参数时,仅指定并行执行开启策略,详见并行开启方式及优先级。parallel_degree:PARALLELHint 中使用parallel_degree作为参数时,可以直接指定并行度时。
示例
下方的查询示例中,使用 PARALLEL Hint 指定使用并行度 DOP = 8 或指定开启 Auto DOP。
SELECT /*+parallel(8)*/ c1, SUM(distinct c2) FROM t1 GROUP BY c1;
SELECT /*+parallel(auto)*/ c1, SUM(distinct c2) FROM t1 GROUP BY c1;
注意:一些场景不支持并行执行,即使通过 PARALLEL 指定开启并行,执行计划仍可能禁用并行执行。
QUERY_TIMEOUT Hint
QUERY_TIMEOUT Hint 指定当前查询的执行超时时间。
语法
/*+ QUERY_TIMEOUT ( time_usec ) */
参数解释
time_usec:指查询超时时间,单位为微秒。
示例
--指定查询超时时间为 1 秒,该查询在指定超时时间内未执行完成将返回超时错误。
SELECT /*+ QUERY_TIMEOUT(1000000) */ *
FROM employees e
WHERE e.department_id = 1001;
READ_CONSISTENCY Hint
READ_CONSISTENCY Hint 指定当前查询的读一致性级别。
语法
/*+ READ_CONSISTENCY(WEAK[STRONG]) */
参数解释
WEAK:开启使用弱一致性,即开启弱读。STRONG:开启使用强一致性,即关闭弱读。
示例
--使用 READ_CONSISTENCY Hint 并设置为 WEAK,指定查询开启弱读。
SELECT /*+ READ_CONSISTENCY(WEAK) */ *
FROM employees
WHERE employees.department_id = 1001;
STAT Hint
STAT Hint 指定对查询计划中特定算子输出进行追踪。
添加 STAT Hint 后,查询计划中会分配 MONITORING DUMP 算子,该算子直接输出排序算子的所有数据,并在执行结束后将算子执行时间、输出行数等信息打印在 observer 日志中。
语法
/*+ STAT(TRACING_NUM_LIST) */
参数解释
TRACING_NUM_LIST:为需要追踪算子的 ID 列表。
示例
-- 添加 Hint `/*+ STAT(0, 2) */` 前后执行计划变化情况
explain basic
SELECT /*+leading(t1) use_hash(t2)*/ * FROM t1, t2 WHERE t1.c1 = t2.c1;
Query Plan
===========================
|ID|OPERATOR |NAME|
---------------------------
|0 |HASH JOIN | |
|1 |├─TABLE FULL SCAN|T1 |
|2 |└─TABLE FULL SCAN|T2 |
===========================
explain basic
SELECT /*+leading(t1) use_hash(t2) stat(0, 2)*/ *
FROM t1, t2 where t1.c1 = t2.c1;
Query Plan
===============================
|ID|OPERATOR |NAME|
-------------------------------
|0 |MONITORING DUMP | |
|1 |└─HASH JOIN | |
|2 | ├─TABLE FULL SCAN |T1 |
|3 | └─MONITORING DUMP | |
|4 | └─TABLE FULL SCAN|T2 |
===============================
TRANS_PARAM Hint
TRANS_PARAM Hint 用于在查询级别指定事务相关的参数。
语法
/*+ TRANS_PARAM ['FORCE_EARLY_LOCK_FREE' , 'TRUE'] */
参数解释
现在支持的参数只有事务层面的提前解行锁 FORCE_EARLY_LOCK_FREE 参数。
FORCE_EARLY_LOCK_FREE:取值为 TRUE 时,表示支持, FALSE 表示不支持。
注意:这里的参数名和参数值要用单引号(' ')引起来,当参数的值为数值型时可以不用引号引起来。
示例
-- 使用 TRANS_PARAM Hint 并设置参数 'FORCE_EARLY_LOCK_FREE' 为 'TRUE',指定事务层面提前解行锁。
SELECT /*+ TRANS_PARAM('FORCE_EARLY_LOCK_FREE' 'TRUE') */ *
FROM employees e
WHERE e.department_id = 1001;
TRACING Hint
TRACING Hint 指定对查询计划中特定算子输出进行追踪。
TRACING Hint 的使用方式、添加 Hint 后的计划形态和使用 STAT Hint 时完全相同。
与使用 STAT Hint 的区别在于,使用 TRACING Hint 时 MONITORING DUMP 算子会将其所有输出数据打印在 observer 日志中。
语法
/*+ TRACING(TRACING_NUM_LIST)*/
参数解释
TRACING_NUM_LIST:为需要追踪算子的 ID 列表。
示例
-- 使用 TRACING Hint 并设置级别为 1,启用对当前查询的跟踪
SELECT /*+ TRACING(1) */ *
FROM employees e
WHERE e.department_id = 1001;
USE_PLAN_CACHE Hint
USE_PLAN_CACHE Hint 用于指定当前查询的计划缓存(Plan Cache)使用策略,更多有关计划缓存的信息,参见执行计划缓存。
语法
/*+ USE_PLAN_CACHE ( NONE | DEFAULT ) */
参数解释
NONE:指定查询不使用计划缓存。DEFAULT:指定当前查询使用系统变量ob_enable_plan_cache控制计划缓存策略。
示例
-- 使用参数 `NONE`时指定查询不使用计划缓存,使用参数 `DEFAULT`时指定当前查询使用系统变量 `ob_enable_plan_cache` 控制计划缓存策略。
SELECT /*+ USE_PLAN_CACHE(NONE) */ *
FROM employees e
WHERE e.department_id = 1001;
SELECT /*+ USE_PLAN_CACHE(DEFAULT) */ *
FROM employees e
WHERE e.department_id = 1001;