(g)v$sql_audit 是全局 SQL 审计表,可以用来查看每次请求客户端来源、执行服务器信息、执行状态信息、等待事件以及执行各阶段耗时等。

sql_audit 相关设置

  • 设置 sql_audit 使用开关。

    1. obclient>ALTER SYSTEM SET enable_sql_audit = true
    2. /*开启 sql_audit*/
    3. obclient>ALTER SYSTEM SET enable_sql_audit = false;
    4. /*关闭 sql_audit*/
  • 设置 sql_audit 内存上限。默认内存上限为 3 G,可设置范围为 [64M,+∞]。

    1. 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)

该请求消耗的内存