OceanBase的视图(v$sql_audit
)会以类似队列形式缓存当前集群内运行的所有SQL的执行性能信息,并且包括那些执行报错的SQL(报错原因很多如内部执行超时、锁等待超时、违反约束等各种原因)。这部份数据全部在内存里,内存大小由参数控制(sql_audit_memory_limit
),默认是3G
。超出这个大小的SQL审计信息就遵循先入先出原则,并不会保存在磁盘文件里。
OceanBase的SQL审计功能由参数(enable_sql_audit
)控制,可以针对每个节点设置是否开启。默认值是开启的(true
)。
sql_audit 相关设置
- 设置 sql_audit 使用开关。
alter system set enable_sql_audit = true/false;
- 设置 sql_audit 内存上限。默认内存上限为3G,可设置范围为 [64M,+∞]。
alter system set sql_audit_memory_limit = '3G';
sql_audit 淘汰机制
- 机制启动间隔:
后台任务每隔 1s 会检测是否需要淘汰。
- 触发淘汰的标准:
-
- 当内存或记录数达到淘汰上限时触发淘汰;
- sql_audit 内存最大可使用上限:avail_mem_limit = min(OBServer可使用内存*10%, sql_audit_memory_limit);
- 淘汰内存上限
- 当avail_mem_limit 在[64M, 100M]时, 内存使用达到 avail_mem_limit - 20M 时触发淘汰;
- 当avail_mem_limit 在 [5G, +∞]时, 内存使用达到 availmem_limit - 1G 时触发淘汰;
- 当avail_mem_limit 在[100M, 5G]时, 内存使用达到 availmem_limit*0.8 时触发淘汰;
-
- 淘汰记录数上限:当sql_audidt记录数超过 900w 条记录时,触发淘汰。
- 停止淘汰的标准:
-
- 如果是达到内存上限触发淘汰则:
-
-
- 当 avail_mem_limit 在 [64M, 100M] 时, 内存使用淘汰到 avail_mem_limit-40M 时停止淘汰;
- 当 avail_mem_limit 在 [100M, 5G] 时, 内存使用淘汰到 availmem_limit*0.6 时停止淘汰;
- 当 avail_mem_limit 在 [5G, +∞] 时, 内存使用淘汰到 availmem_limit-2G 时停止淘汰;
-
-
- 如果是达到记录数上限触发的淘汰则淘汰到 800w 行记录时停止淘汰。
OceanBase的SQL审计视图(gv$sql_audit)包含了SQL文本以及执行的详细信息,如执行节点、总耗时、等待时间、服务时间、逻辑读、影响行数、等待事件及其参数和其他信息
下面是查询某个节点上某个租户的某个用户的的最近的 100条SQL执行信息
SELECT /*+ read_consistency(weak) ob_querytimeout(100000000) */ substr(usec_to_time(request_time),1,19) request_time_, s.svr_ip, s.client_Ip, s.sid,s.tenant_id, s.tenant_name, s.user_name, s.db_name, s.query_sql, s.affected_rows, s.return_rows, s.ret_code, s.event, s.elapsed_time, s.queue_time, s.execute_time, round(s.request_memory_used/1024/1024,2) req_mem_mb, is_executor_rpc, is_inner_sql
FROM gv$sql_audit
s
WHERE s.tenant_id=1001 and user_name='testuser' and svr_ip in ('11.166.84.78')
ORDER BY request_time DESC
LIMIT 100;
sql_audit 字段解释
字段名称 | 类型 | 描述 |
SVR_IP | varchar(32) | ip地址 |
SVR_PORT | bigint(20) | 端口号 |
REQUEST_ID | bigint(20) | 请求的 id 号 |
TRACE_ID | varchar(128) | 这条语句的 trace_id |
CLIENT_IP | varchar(32) | 发送请求的 client ip |
CLIENT_PORT | bigint(20) | 发送请求的 client port |
TENANT_ID | bigint(20) | 发送请求的租户 id |
TENANT_NAME | varchar(64) | 发送请求的租户名称 |
USER_ID | bigint(20) | 发送请求的用户 id |
USER_NAME | varchar(64) | 发送请求的用户名称 |
SQL_ID | varchar(32) | 这条 SQL 的 id |
QUERY_SQL | varchar(32768) | 实际的 SQL 语句 |
PLAN_ID | bigint(20) | 执行计划 id |
AFFECTED_ROWS | bigint(20) | 影响行数 |
RETURN_ROWS | bigint(20) | 返回行数 |
PARTITION_CNT | bigint(20) | 该请求涉及的分区数 |
RET_CODE | bigint(20) | 执行结果返回码 |
EVENT | varchar(64) | 最长等待事件名称 |
P1TEXT | varchar(64) | 等待事件参数1 |
P1 | bigint(20) unsigned | 等待事件参数1的值 |
P2TEXT | varchar(64) | 等待事件参数2 |
P2 | bigint(20) unsigned | 等待事件参数2的值 |
P3TEXT | varchar(64) | 等待事件参数3 |
P3 | bigint(20) unsigned | 等待事件参数3的值 |
LEVEL | bigint(20) | 等待事件的 level 级别 |
WAIT_CLASS_ID | bigint(20) | 等待事件所属的 class id |
WAIT_CLASS# | bigint(20) | 等待事件所属的 class 的下标 |
WAIT_CLASS | varchar(64) | 等待事件所属的 class 名称 |
STATE | varchar(19) | 等待事件的状态 |
WAIT_TIME_MICRO | bigint(20) | 该等待事件所等待的时间(微秒) |
TOTAL_WAIT_TIME_MICRO | bigint(20) | 执行过程所有等待的总时间(微秒) |
TOTAL_WAITS | bigint(20) | 执行过程总等待的次数 |
RPC_COUNT | bigint(20) | 发送 rpc 个数 |
PLAN_TYPE | bigint(20) | 执行计划类型,local remote distribute |
IS_INNER_SQL | tinyint(4) | 是否内部 sql 请求 |
IS_EXECUTOR_RPC | tinyint(4) | 当前请求是否 rpc 请求 |
IS_HIT_PLAN | tinyint(4) | 是否命中 plan_cache |
REQUEST_TIME | bigint(20) | 开始执行时间点 |
ELAPSED_TIME | bigint(20) | 接收到请求到执行结束消耗总时间 |
NET_TIME | bigint(20) | 发送 rpc 到接收到请求时间 |
NET_WAIT_TIME | bigint(20) | 接收到请求到进入队列时间 |
QUEUE_TIME | bigint(20) | 请求在队列等待事件 |
DECODE_TIME | bigint(20) | 出队列后 decode 时间 |
GET_PLAN_TIME | bigint(20) | 开始 process 到获得 plan 时间 |
EXECUTE_TIME | bigint(20) | plan 执行消耗时间 |
APPLICATION_WAIT_TIME | bigint(20) unsigned | 所有 application 类事件的总时间 |
CONCURRENCY_WAIT_TIME | bigint(20) unsigned | 所有 concurrency 类事件的总时间 |
USER_IO_WAIT_TIME | bigint(20) unsigned | 所有 user_io 类事件的总时间 |
SCHEDULE_TIME | bigint(20) unsigned | 所有 schedule 类事件的时间 |
ROW_CACHE_HIT | bigint(20) | 行缓存命中次数 |
BLOOM_FILTER_CACHE_HIT | bigint(20) | bloom filter 缓存命中次数 |
BLOCK_CACHE_HIT | bigint(20) | 块缓存命中次数 |
BLOCK_INDEX_CACHE_HIT | bigint(20) | 块索引缓存命中次数 |
DISK_READS | bigint(20) | 物理读次数 |
EXECUTION_ID | bigint(20) | 执行 ID |
SESSION_ID | bigint(20) | session id |
RETRY_CNT | bigint(20) | 重试次数 |
TABLE_SCAN | tinyint(4) | 判断该请求是否含全表扫描 |
CONSISTENCY_LEVEL | bigint(20) | 一致性级别 |
MEMSTORE_READ_ROW_COUNT | bigint(20) | MEMSTORE 中的读行数 |
SSSTORE_READ_ROW_COUNT' | bigint(20) | SSSTORE 中国年读的行数 |
REQUEST_MEMORY_USED | bigint(20) | 该请求消耗的内存 |