基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
SQL 审计
更新时间:2026-08-21 11:56:40
GV$OB_SQL_AUDIT 是全局 SQL 审计表,可以用来查看每次请求客户端来源、执行服务器信息、执行状态信息、等待时间以及执行各阶段耗时等。
GV$OB_SQL_AUDIT 字段说明
| 字段名称 | 类型(MySQL 模式) | 类型(Oracle 模式) | 描述 |
|---|---|---|---|
| SVR_IP | varchar(46) | varchar(46) | IP 地址 |
| SVR_PORT | bigint(20) | number(38) | 端口号 |
| REQUEST_ID | bigint(20) | number(38) | 请求的 ID 号 |
| SQL_EXEC_ID | bigint(20) | number(38) | 如果 SQL 计划正在被执行,则显示对应的 SQL ID |
| TRACE_ID | varchar(128) | varchar(128) | 这条语句的 Trace ID |
| SID | bigint(20) unsigned | number(38) | Session ID |
| CLIENT_IP | varchar(46) | varchar(46) |
|
| CLIENT_PORT | bigint(20) | number(38) | 发送请求的 Client Port |
| TENANT_ID | bigint(20) | number(38) | 发送请求的租户 ID |
| TENANT_NAME | varchar(64) | varchar(46) | 发送请求的租户名称 |
| EFFECTIVE_TENANT_ID | bigint(20) | number(38) | 租户 ID |
| USER_ID | bigint(20) | number(38) | 发送请求的用户 ID |
| USER_NAME | varchar(64) | varchar(46) | 发送请求的用户名称 |
| USER_GROUP | bigint(20) | number(38) | 用户所属资源组的 ID |
| USER_CLIENT_IP | varchar(32) | varchar(32) | 发送请求的客户端的 IP |
| DB_ID | bigint(20) unsigned | number(38) | 数据库 ID |
| DB_NAME | varchar(128) | varchar(128) | 数据库名称 |
| SQL_ID | varchar(32) | varchar(32) | 这条 SQL 的 ID |
| QUERY_SQL | longtext | CLOB | 实际的 SQL 语句实际的 SQL 语句。
说明该字段从 V4.3.5 BP4 版本开始只支持 SYS 租户查看。 |
| PLAN_ID | bigint(20) | number(38) | 执行计划 ID |
| AFFECTED_ROWS | bigint(20) | number(38) | 影响行数 |
| RETURN_ROWS | bigint(20) | number(38) | 返回行数 |
| PARTITION_CNT | bigint(20) | number(38) | 该请求涉及的分区数 |
| RET_CODE | bigint(20) | number(38) | 执行结果返回码 |
| QC_ID | bigint(20) unsigned | number(38) | 并行查询中的 qc_id |
| DFO_ID | bigint(20) | number(38) | 并行查询中的 dfo_id |
| SQC_ID | bigint(20) | number(38) | 并行查询中的 sqc_id |
| WORKER_ID | bigint(20) | number(38) | 线程 ID |
| EVENT | varchar(64) | varchar(64) | 最长等待事件名称 |
| P1TEXT | varchar(64) | varchar(64) | 等待事件参数 1 |
| P1 | bigint(20) unsigned | number(38) | 等待事件参数 1 的值 |
| P2TEXT | varchar(64) | varchar(64) | 等待事件参数 2 |
| P2 | bigint(20) unsigned | number(38) | 等待事件参数 2 的值 |
| P3TEXT | varchar(64) | varchar(64) | 等待事件参数 3 |
| P3 | bigint(20) unsigned | number(38) | 等待事件参数 3 的值 |
| LEVEL | bigint(20) | number(38) | 等待事件的 Level 级别 |
| WAIT_CLASS_ID | bigint(20) | number(38) | 等待事件所属的 Class ID |
| WAIT_CLASS# | bigint(20) | number(38) | 等待事件所属的 Class 的下标 |
| WAIT_CLASS | varchar(64) | varchar(64) | 等待事件所属的 Class 名称 |
| STATE | varchar(19) | varchar(19) | 等待事件的状态 |
| WAIT_TIME_MICRO | bigint(20) | number(38) | 该等待事件所等待的时间,单位:微秒 |
| TOTAL_WAIT_TIME_MICRO | bigint(20) | number(38) | 执行过程所有等待的总时间,单位:微秒 |
| TOTAL_WAITS | bigint(20) | number(38) | 执行过程总等待的次数 |
| RPC_COUNT | bigint(20) | number(38) | 发送 RPC 个数 |
| PLAN_TYPE | bigint(20) | number(38) | 执行计划类型:
|
| IS_INNER_SQL | tinyint(4) | number(38) | 是否为内部 SQL 请求 |
| IS_EXECUTOR_RPC | tinyint(4) | number(38) | 当前请求是否为 RPC 请求 |
| IS_HIT_PLAN | tinyint(4) | number(38) | 是否命中计划缓存 |
| REQUEST_TIME | bigint(20) | number(38) | 开始执行时间点,单位:微秒 |
| ELAPSED_TIME | bigint(20) | number(38) | 接收到请求到执行结束消耗总时间,单位:微秒 |
| NET_TIME | bigint(20) | number(38) | 发送 RPC 到接收到请求时间,单位:微秒 |
| NET_WAIT_TIME | bigint(20) | number(38) | 接收到请求到进入队列时间,单位:微秒 |
| QUEUE_TIME | bigint(20) | number(38) | 请求在队列等待时间,单位:微秒 |
| DECODE_TIME | bigint(20) | number(38) | 出队列后 Decode 时间,单位:微秒 |
| GET_PLAN_TIME | bigint(20) | number(38) | 开始执行到获得计划时间,单位:微秒 |
| EXECUTE_TIME | bigint(20) | number(38) | Plan 执行消耗时间,单位:微秒 |
| APPLICATION_WAIT_TIME | bigint(20) unsigned | number(38) | 所有 Application 类事件的总时间,单位:微秒 |
| CONCURRENCY_WAIT_TIME | bigint(20) unsigned | number(38) | 所有 Concurrency 类事件的总时间,单位:微秒 |
| USER_IO_WAIT_TIME | bigint(20) unsigned | number(38) | 所有 user_io 类事件的总时间,单位:微秒 |
| SCHEDULE_TIME | bigint(20) unsigned | number(38) | 所有 Schedule 类事件的时间,单位:微秒 |
| ROW_CACHE_HIT | bigint(20) | number(38) | 行缓存命中次数 |
| BLOOM_FILTER_CACHE_HIT | bigint(20) | number(38) | Bloom Filter 缓存命中次数 |
| BLOCK_CACHE_HIT | bigint(20) | number(38) | 块缓存命中次数 |
| DISK_READS | bigint(20) | number(38) | 物理读次数 |
| RETRY_CNT | bigint(20) | number(38) | 重试次数 |
| TABLE_SCAN | tinyint(4) | number(38) | 判断该请求是否含全表扫描 |
| CONSISTENCY_LEVEL | bigint(20) | number(38) | 一致性级别 |
| MEMSTORE_READ_ROW_COUNT | bigint(20) | number(38) | MemStore 中读的行数 |
| SSSTORE_READ_ROW_COUNT | bigint(20) | number(38) | SSSTORE 中读的行数 |
| DATA_BLOCK_READ_CNT | bigint(20) | NO | 访问的数据微块数量 |
| DATA_BLOCK_CACHE_HIT | bigint(20) | NO | 命中数据微块 Cache 数量 |
| INDEX_BLOCK_READ_CNT | bigint(20) | NO | 访问的中间层微块数量 |
| INDEX_BLOCK_CACHE_HIT | bigint(20) | NO | 命中中间层微块 Cache 数量 |
| BLOCKSCAN_BLOCK_CNT | bigint(20) | NO | 单边扫描的数据微块数量 |
| BLOCKSCAN_ROW_CNT | bigint(20) | NO | 单边扫描的数据行数 |
| PUSHDOWN_STORAGE_FILTER_ROW_CNT | bigint(20) | NO | 下压存储 Filter 过滤后行数 |
| REQUEST_MEMORY_USED | bigint(20) | number(38) | 该请求执行过程中 SQL 引擎的内存使用峰值(peak),单位:字节。该值为执行过程中的瞬时最高内存使用量,不是累计内存分配总量。统计范围不包括 MemStore 和 Logger 内存 |
| EXPECTED_WORKER_COUNT | bigint(20) | number(38) | 请求期望的工作线程数 |
| USED_WORKER_COUNT | bigint(20) | number(38) | 请求实际使用的工作线程数 |
| SCHED_INFO | varchar(16384) | varchar(16384) | 请求的调度信息 |
| PS_CLIENT_STMT_ID | bigint(20) | NUMBER(38) | 该字段用于记录请求对应的客户端 Prepare ID:
|
| PS_INNER_STMT_ID | bigint(20) | NUMBER(38) | 该字段用于记录请求对应的内部(数据库内部)Prepare ID:
|
| TX_ID | bigint(20) | NO | 请求对应的事务的 Hash 值 |
| SNAPSHOT_VERSION | bigint(20)unsigned | NO | 当前语句的快照读版本号 |
| REQUEST_TYPE | bigint(20) | number(38) | 请求对应的类型:
|
| IS_BATCHED_MULTI_STMT | tinyint(4) | number(38) | 是否进行 Batch Multi Stmt 的优化 |
| OB_TRACE_INFO | VARCHAR2(4096) | VARCHAR2(4096) | 用户设置的 Trace 信息 |
| PLAN_HASH | bigint(20) unsigned | number(38) | 执行计划的 Hash 值 |
| PARAMS_VALUE | longtext | CLOB | 参数值 |
| RULE_NAME | varchar(256) | VARCHAR2(256) | 规则名称 |
| TX_INTERNAL_ROUTING | bigint(20) | NUMBER | 当前事务是否启用了事务路由 |
| TX_STATE_VERSION | bigint(20) unsigned | NUMBER(38) | 当前事务状态的版本号 |
| FLT_TRACE_ID | varchar(1024) | varchar(1024) | 记录全链路追踪的 Trace ID。如果为空,则说明没有被全链路追踪监控。该字段是 UUID,有别于 Trace,其表示形式示例为:000600d6-a5de-038c-6c80-df07e4e79149 |
| PL_TRACE_ID | varchar(128) | VARCHAR2(128) | 当前 SQL 语句外层 PL 的 Trace ID |
| PLSQL_EXEC_TIME | bigint(20) | NUMBER(38) | PL 执行的耗时 |
| TOTAL_MEMSTORE_READ_ROW_COUNT | bigint(20) | NUMBER(38) | 整个工作过程中从 MemStore 读出的总行数 |
| TOTAL_SSSTORE_READ_ROW_COUNT | bigint(20) | NUMBER(38) | 整个工作过程中从 SSSTORE 读出的总行数 |
| PROXY_USER | varchar(128) | VARCHAR2(128) | 代理用户登录场景,返回代理用户的名称 |
| SEQ_NUM | bigint(20) | NUMBER(38) | 事务中的语句序号。
说明该字段从 V4.3.5 版本开始引入,字段默认为 NULL。 |
| USER_CLIENT_PORT | bigint(20) | NO | 用于展示客户端端口号。
说明该字段从 V4.3.5 BP4 版本开始引入,字段默认为 NULL。 |
| TRANS_STATUS | varchar(256) | NO | 用于展示显示开启事务或隐式开启事务或不开启事务。
说明该字段从 V4.3.5 BP4 版本开始引入,字段默认为 NULL。 |
| FUSE_ROW_CACHE_HIT | bigint(20) | number(38) | 暂不支持该字段,字段默认为 NULL |
| LOCK_FOR_READ_TIME | bigint(20) |
注意该视图在 OceanBase 数据库 Oracle 模式中暂无字段 |
读取数据时等待锁的耗时,单位:微秒 |
| PARTITION_HIT | tinyint(4) | - | 是否命中本地 Partition |
| PLSQL_COMPILE_TIME | bigint(20) | NUMBER(38) | PL 编译用时。
说明
|
| INSERT_DUPLICATE_ROW_COUNT | bigint(20) | NUMBER(38) | 记录 insertup 或者 replace into 时重复行数的数量。
说明 |
说明
REQUEST_MEMORY_USED 记录的是单次 SQL 请求执行过程中 SQL 引擎内存使用的最高水位(峰值),不是累计内存分配总量。例如,一条 SQL 执行过程中内存先增长到 100 MB 再下降到 20 MB,该字段值为 100 MB(峰值),而非 120 MB(累计)。统计范围仅包含 SQL 执行引擎内存(如算子工作内存、表达式计算内存等),不包括 MemStore(增量数据写入内存)和 Logger(日志内存)。
SQL Audit 相关设置
设置 SQL Audit 的开关
开启 SQL Audit:
ALTER SYSTEM SET enable_sql_audit = true;关闭 SQL Audit:
ALTER SYSTEM SET enable_sql_audit = false;
设置 SQL Audit 所使用的内存占租户内存的百分比
ob_sql_audit_percentage 用于设置 SQL Audit 所使用的内存占租户内存的百分比。默认内存百分比为 3,可设置范围为 [0, 80]。
SET GLOBAL ob_sql_audit_percentage = 3;
关于 ob_sql_audit_percentage 的详细介绍信息,参见 ob_sql_audit_percentage。
SQL Audit 淘汰机制
租户的后台任务每隔 1s 会根据 OBServer 节点和 SQL Audit 的内存使用情况来决定是否触发淘汰 SQL。SQL Audit 内存上限根据 ob_sql_audit_percentage 分配可用的最大内存。
当 SQL Audit 的实际内存使用达到指定阈值时,满足触发淘汰的条件,开启淘汰;当 SQL Audit 的实际内存使用降到指定阈值时,满足停止淘汰的条件,停止淘汰。SQL Audit 淘汰机制如下表所示。
| 触发机制 | SQL Audit 内存范围 | 触发淘汰的条件 | 停止淘汰的条件 |
|---|---|---|---|
| 内存使用 | [0,64M] | 内存上限 *50% | 0 M |
| 内存使用 | [64M,100M] | 内存上限-20M | 内存上限-40 M |
| 内存使用 | [100M,5G] | 内存上限 *80% | 内存上限 *60% |
| 内存使用 | [5G,+∞) | 内存上限-1G | 内存上限-2 G |
| 记录数 | 无 | 900 万 | 800万 |
示例
通过 GV$OB_SQL_AUDIT 视图可以方便的查询 SQL 执行的各种维度信息。如下示例为查询执行耗时超过 100ms 的 SQL 及其 FLT_TRACE_ID。
开启全链路追踪 Session 级别 Trace,记录当前 Session 所有 SQL 的相关耗时等信息,采样频率为 50%。
CALL DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(null,1,0.5,'ALL');关于 DBMS_MONITOR.OB_SESSION_TRACE_ENABLE 的详细介绍信息,参见 OB_SESSION_TRACE_ENABLE。
查看接收到请求到执行结束消耗总时间大于 100000 微秒的前十条信息。
SELECT request_id, usec_to_time(request_time), ELAPSED_TIME, QUEUE_TIME, EXECUTE_TIME, FLT_TRACE_ID, QUERY_SQL FROM oceanbase.V$OB_SQL_AUDIT WHERE ELAPSED_TIME > 100000 LIMIT 10;返回结果如下:
+------------+----------------------------+--------------+------------+--------------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | request_id | usec_to_time(request_time) | ELAPSED_TIME | QUEUE_TIME | EXECUTE_TIME | FLT_TRACE_ID | QUERY_SQL | +------------+----------------------------+--------------+------------+--------------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 5950244 | 2023-09-07 16:20:47.465958 | 127623 | 26 | 127206 | 000604c0-8981-9184-518a-e234439d873c | CREATE TABLE tbl2(c1 INT PRIMARY KEY,c2 INT) | | 5951861 | 2023-09-07 16:21:07.887121 | 333776 | 38 | 310298 | | ALTER TABLE tbl2 ADD CONSTRAINT fk1 FOREIGN KEY (c2) REFERENCES tbl3(c1) ON UPDATE SET NULL | | 5953177 | 2023-09-07 16:21:28.215377 | 174416 | 24 | 174186 | 000604c0-8bef-5afb-f9d3-2ee0dfab4c8f | SELECT request_id,usec_to_time(request_time),ELAPSED_TIME,QUEUE_TIME,EXECUTE_TIME,FLT_TRACE_ID,QUERY_SQL FROM v$OB_SQL_AUDIT where ELAPSED_TIME > 100000 | | 5954522 | 2023-09-07 16:21:48.317360 | 128803 | 27 | 128542 | 000604c0-8d22-1659-7b0c-a0ac0645894d | SELECT request_id,usec_to_time(request_time),ELAPSED_TIME,QUEUE_TIME,EXECUTE_TIME,FLT_TRACE_ID,QUERY_SQL FROM v$OB_SQL_AUDIT where ELAPSED_TIME > 100000 limit 10 | +------------+----------------------------+--------------+------------+--------------+--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 4 rows in set
相关文档
- 关于全链路追踪的详细介绍信息,参见 全链路追踪。
- 关于视图
GV$OB_SQL_AUDIT的详细介绍信息,参见 GV$OB_SQL_AUDIT(MySQL 模式) 或 GV$OB_SQL_AUDIT(Oracle 模式)。