OceanBase (g)v$sql_audit 介绍
(g)v$sql_audit 是全局 SQL 审计表,可以用来查看每次请求客户端来源、执行服务器信息、执行状态信息、等待事件以及执行各阶段耗时等。
sql_audit 相关设置
-
设置 sql_audit 使用开关。
obclient>ALTER SYSTEM SET enable_sql_audit = true; /*开启 sql_audit*/ obclient>ALTER SYSTEM SET enable_sql_audit = false; /*关闭 sql_audit*/
-
设置 sql_audit 内存上限。默认内存上限为 3 G,可设置范围为 [64M,+∞]。
obclient>ALTER SYSTEM SET sql_audit_memory_limit = '3G';
sql_audit 淘汰机制
-
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
在 [100M, 5G] 范围内时, 内存使用达到availmem_limit*0.8
时触发淘汰。 -
当
avail_mem_limit
在 [5G, +∞)范围内时, 内存使用达到availmem_limit-1G
时触发淘汰。 -
当 sql_audidt 记录数超过 900 万条时,触发淘汰。
-
-
sql_audit 根据以下标准决定是否停止淘汰:
-
如果是达到内存上限触发淘汰则:
-
当
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
时停止淘汰。 -
如果是达到记录数上限触发的淘汰则淘汰到 800 万行记录时停止淘汰。
-
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) |
是否命中计划缓存 |
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) |
开始执行到获得计划时间 |
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) |
该请求消耗的内存 |