sql_audit中username为null

3.x 4.x
v$sql_audit中username代表什么? 可不可以有参数设置不记录系统内部sql 或者username null的数据。里面觉大部分都是系统产生的SQL,导致刚执行没多久的sql 都被刷新了,没法看之前的数据。
image

1 个赞

sql_audit的数据是在内存中的,username表示的是"发送请求的用户名称",OceanBase 社区

不能把sql_audit的数据当成持久化的数据去查历史记录,如果想保存的时间久一点,可以调大系统租户内存以及保存数据的上限;OceanBase分布式数据库-海量数据 笔笔算数

大佬,我的问题是 username是null的表示什么?

刷的太快了 ,甚至连1分钟前的都查不到,能有多大内存可以扩?而且你看截图,真正的用户sql没多少。

user_name为null的一般都是系统内部产生的sql,你可以过滤查一下user_name为null的query_sql字段,很多是空的。这些产生的原因有多种,比较常见的是业务sql发生远程或者分布式执行的时候,可能你们的业务表不是分区表?查询语句涉及很多范围查询?

可以从sql_audit的plan_type字段看执行计划类型。

  • plan_type=1 :本地执行计划。性能最好。
  • plan_type=2 : 远程执行计划。
  • plan_type=3 : 分布式执行计划。包含本地执行计划和远程执行计划。

租户内存多大。。。1分钟都能刷走

220G 租户内存,默认sql audit内存参数,可以看下连续两次的min(request_id)

1 个赞

确实。。。查查原因把。。。跟我们这边的使用情况不一样

@靖顺 @近墨者 大量plan_type=0的 ,这种 应用侧应该查哪? 另外为什么会有有select update的plan_type也是0

在sql_audit的记录中,plan_type有第四种值,那就是0,0对应的是没有初始化的,对应的sql是没有执行计划的。这类没有执行计划的sql包含DDL语句CMD语句

你的业务有很多ddl变更的语句?

前面有type 0的SQL排序后结果,set多,为啥业务sql也有很多

过滤一下plan_type = 0的结果,看看有没有业务SQL

GV$OB_SQL_AUDIT 视图的数据存放在一个可配置的内存空间中,每个租户在每个节点上都有一块独立的缓存,当内存使用或记录数达到淘汰上限时会触发自动淘汰,最久的数据优先淘汰。有经验的 DBA 在排查 SQL 问题时,往往第一件事就是关闭 SQL Audit 功能以保存现场,避免抖动现场的监控数据被淘汰.
文档里说的,这种情况下是不是应该关闭SQL Audit功能。

前面截图里的select insert update都是业务SQL ,也是Plan_type=0的

已plan_type=0为条件,查一下截图吧。看看哪种最多,plan_type=0的太多了,比本地执行计划+远程+分布式还多出1个数量级