OceanBase的SQL全量日志

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_IPvarchar(32)ip地址
SVR_PORTbigint(20)端口号
REQUEST_IDbigint(20)请求的 id 号
TRACE_IDvarchar(128)这条语句的 trace_id
CLIENT_IPvarchar(32)发送请求的 client ip
CLIENT_PORTbigint(20)发送请求的 client port
TENANT_IDbigint(20)发送请求的租户 id
TENANT_NAMEvarchar(64)发送请求的租户名称
USER_IDbigint(20)发送请求的用户 id
USER_NAMEvarchar(64)发送请求的用户名称
SQL_IDvarchar(32)这条 SQL 的 id
QUERY_SQLvarchar(32768)实际的 SQL 语句
PLAN_IDbigint(20)执行计划 id
AFFECTED_ROWSbigint(20)影响行数
RETURN_ROWSbigint(20)返回行数
PARTITION_CNTbigint(20)该请求涉及的分区数
RET_CODEbigint(20)执行结果返回码
EVENTvarchar(64)最长等待事件名称
P1TEXTvarchar(64)等待事件参数1
P1bigint(20) unsigned等待事件参数1的值
P2TEXTvarchar(64)等待事件参数2
P2bigint(20) unsigned等待事件参数2的值
P3TEXTvarchar(64)等待事件参数3
P3bigint(20) unsigned等待事件参数3的值
LEVELbigint(20)等待事件的 level 级别
WAIT_CLASS_IDbigint(20)等待事件所属的 class id
WAIT_CLASS#bigint(20)等待事件所属的 class 的下标
WAIT_CLASSvarchar(64)等待事件所属的 class 名称
STATEvarchar(19)等待事件的状态
WAIT_TIME_MICRObigint(20)该等待事件所等待的时间(微秒)
TOTAL_WAIT_TIME_MICRObigint(20)执行过程所有等待的总时间(微秒)
TOTAL_WAITSbigint(20)执行过程总等待的次数
RPC_COUNTbigint(20)发送 rpc 个数
PLAN_TYPEbigint(20)执行计划类型,local remote distribute
IS_INNER_SQLtinyint(4)是否内部 sql 请求
IS_EXECUTOR_RPCtinyint(4)当前请求是否 rpc 请求
IS_HIT_PLANtinyint(4)是否命中 plan_cache
REQUEST_TIMEbigint(20)开始执行时间点
ELAPSED_TIMEbigint(20)接收到请求到执行结束消耗总时间
NET_TIMEbigint(20)发送 rpc 到接收到请求时间
NET_WAIT_TIMEbigint(20)接收到请求到进入队列时间
QUEUE_TIMEbigint(20)请求在队列等待事件
DECODE_TIMEbigint(20)出队列后 decode 时间
GET_PLAN_TIMEbigint(20)开始 process 到获得 plan 时间
EXECUTE_TIMEbigint(20)plan 执行消耗时间
APPLICATION_WAIT_TIMEbigint(20) unsigned所有 application 类事件的总时间
CONCURRENCY_WAIT_TIMEbigint(20) unsigned所有 concurrency 类事件的总时间
USER_IO_WAIT_TIMEbigint(20) unsigned所有 user_io 类事件的总时间
SCHEDULE_TIMEbigint(20) unsigned所有 schedule 类事件的时间
ROW_CACHE_HITbigint(20)行缓存命中次数
BLOOM_FILTER_CACHE_HITbigint(20)bloom filter 缓存命中次数
BLOCK_CACHE_HITbigint(20)块缓存命中次数
BLOCK_INDEX_CACHE_HITbigint(20)块索引缓存命中次数
DISK_READSbigint(20)物理读次数
EXECUTION_IDbigint(20)执行 ID
SESSION_IDbigint(20)session id
RETRY_CNTbigint(20)重试次数
TABLE_SCANtinyint(4)判断该请求是否含全表扫描
CONSISTENCY_LEVELbigint(20)一致性级别
MEMSTORE_READ_ROW_COUNTbigint(20)MEMSTORE 中的读行数
SSSTORE_READ_ROW_COUNT'bigint(20)SSSTORE 中国年读的行数
REQUEST_MEMORY_USEDbigint(20)该请求消耗的内存
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值