审计监控
(g)v$sql_audit是基于虚拟表__all_virtual_sql_audit的视图, 该虚拟表对应的数据存放在一个可配置的内存空间中,能够记录并显示每一次SQL请求的来源、执行状态及统计信息,由于存放这些记录的内存是有限的,因此到达一定内存使用量,会触发淘汰。
sql_audit相关设置
- 设置sql_audit使用开关
alter system set enable_sql_audit = true/false;
- 设置sql_audit内存上限
alter system set sql_audit_memory_limit = '3G';
3G是默认内存上限,可设置范围为[64M,+∞]
-
机制启动间隔:
后台任务每隔1s会检测是否需要淘汰。
-
触发淘汰的标准:
1)当内存或记录数达到淘汰上限时触发淘汰;
2)sql_audit内存最大可使用上限:
avail_mem_limit = min(OBServer可使用内存*10%, sql_audit_memory_limit);
3)淘汰内存上限:
当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时触发淘汰;
4)淘汰记录数上限:
当sql_audidt记录数超过900w条记录时,触发淘汰;
-
停止淘汰的标准:
1)如果是达到内存上限触发淘汰则:
当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时停止淘汰;
2)如果是达到记录数上限触发的淘汰则淘汰到800w行记录时停止淘汰;
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) |
该请求消耗的内存 |
参考ob官方文档
https://oceanbase.alipay.com/docs