暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

OceanBase管理数据库内部表GV$OB_SQL_AUDIT

2023-05-10
792

功能

展示所有 OBServer 上每一次 SQL 请求的来源、执行状态等统计信息。该视图是按照租户拆分的,除了系统租户,其他租户不能跨租户查询。

字段说明

字段名称类型是否可以为 NULL描述
SVR_IPvarchar(46)NOIP 地址
SVR_PORTbigint(20)NO端口号
REQUEST_IDbigint(20)NO请求的 ID 号
SQL_EXEC_IDbigint(20)NO单机单调递增的执行 ID
TRACE_IDvarchar(128)NO该语句的 trace_id
SIDbigint(20) unsignedNOSession 连接 ID
CLIENT_IPvarchar(46)NO
  • 当客户端通过 ODP 与 OBServer 连接时,表示转发请求的 ODP 的 IP
  • 当客户端直接与 OBServer 连接时,表示发送请求的客户端的 IP
  • CLIENT_PORTbigint(20)NO发送请求的客户端端口号
    TENANT_IDbigint(20)NO发送请求的租户 ID
    TENANT_NAMEvarchar(64)NO发送请求的租户名称
    EFFECTIVE_TENANT_IDbigint(20)NO租户 ID
    USER_IDbigint(20)NO发送请求的用户 ID
    USER_NAMEvarchar(64)NO发送请求的用户名称
    USER_GROUPbigint(20)YES用户所属资源组 ID
    USER_CLIENT_IPvarchar(46)NO发送请求的客户端的 IP
    DB_IDbigint(20) unsignedNO数据库 ID
    DB_NAMEvarchar(128)NO数据库名称
    SQL_IDvarchar(32)NO该 SQL 的 ID
    QUERY_SQLlongtextNO实际的 SQL 语句
    PLAN_IDbigint(20)NO执行计划的 ID
    AFFECTED_ROWSbigint(20)NO影响行数
    RETURN_ROWSbigint(20)NO返回行数
    PARTITION_CNTbigint(20)NO该请求涉及的分区数
    RET_CODEbigint(20)NO执行结果返回码:
  • 0:表示没有错误,语句成功执行
  • 其他返回码:表示 OceanBase 错误码。有关错误码的详细介绍,请参见 错误码
  • QC_IDbigint(20) unsignedNO并行执行场景下,调度器 ID
    DFO_IDbigint(20)NO并行执行场景下,当前执行的子计划 ID
    SQC_IDbigint(20)NO并行执行场景下,本地协调器 ID
    WORKER_IDbigint(20)NO并行执行场景下,工作线程 ID
    EVENTvarchar(64)NO最长等待事件名称
    P1TEXTvarchar(64)NO等待事件参数 1
    P1bigint(20) unsignedNO等待事件参数 1 的值
    P2TEXTvarchar(64)NO等待事件参数 2
    P2bigint(20) unsignedNO等待事件参数 2 的值
    P3TEXTvarchar(64)NO等待事件参数 3
    P3bigint(20) unsignedNO等待事件参数 3 的值
    LEVELbigint(20)NO等待事件的级别
    WAIT_CLASS_IDbigint(20)NO等待事件所属的 Class ID
    WAIT_CLASS#bigint(20)NO等待事件所属的 Class 的下标
    WAIT_CLASSvarchar(64)NO等待事件所属的 Class 名称
    STATEvarchar(19)NO等待事件的状态
    WAIT_TIME_MICRObigint(20)NO该等待事件所等待的时间,单位:微秒
    TOTAL_WAIT_TIME_MICRObigint(20)NO执行过程所有等待的总时间,单位:微秒
    TOTAL_WAITSbigint(20)NO执行过程总等待的次数
    RPC_COUNTbigint(20)NO发送的 RPC 个数
    PLAN_TYPEbigint(20)NO执行计划类型:
  • local
  • remote
  • distribute
  • IS_INNER_SQLtinyint(4)NO是否为内部 SQL 请求
    IS_EXECUTOR_RPCtinyint(4)NO当前请求是否为 RPC 请求
    IS_HIT_PLANtinyint(4)NO是否命中 plan_cache
    REQUEST_TIMEbigint(20)NO开始执行时间点,单位:微秒
    ELAPSED_TIMEbigint(20)NO接收到请求到执行结束所消耗的总时间
    NET_TIMEbigint(20)NO发送 RPC 到接收到请求的时间
    NET_WAIT_TIMEbigint(20)NO接收到请求到进入队列的时间
    QUEUE_TIMEbigint(20)NO请求在队列的等待时间
    DECODE_TIMEbigint(20)NO出队列后 Decode 的时间
    GET_PLAN_TIMEbigint(20)NO开始 Process 到获得计划的时间
    EXECUTE_TIMEbigint(20)NO计划执行所消耗的时间
    APPLICATION_WAIT_TIMEbigint(20) unsignedNO所有 Application 类事件的总时间
    CONCURRENCY_WAIT_TIMEbigint(20) unsignedNO所有 Concurrency 类事件的总时间
    USER_IO_WAIT_TIMEbigint(20) unsignedNO所有 user_io 类事件的总时间
    SCHEDULE_TIMEbigint(20) unsignedNO所有 Schedule 类事件的时间
    ROW_CACHE_HITbigint(20)NO行缓存命中次数
    BLOOM_FILTER_CACHE_HITbigint(20)NOBloom Filter 缓存命中次数
    BLOCK_CACHE_HITbigint(20)NO块缓存命中次数
    BLOCK_INDEX_CACHE_HITbigint(20)NO块索引缓存命中次数
    DISK_READSbigint(20)NO物理读次数
    RETRY_CNTbigint(20)NO重试次数
    TABLE_SCANtinyint(4)NO判断该请求是否含全表扫描
    CONSISTENCY_LEVELbigint(20)NO一致性级别
    MEMSTORE_READ_ROW_COUNTbigint(20)NOMEMStore 中的读行数
    SSSTORE_READ_ROW_COUNTbigint(20)NOSSStore 中连读的行数
    DATA_BLOCK_READ_CNTbigint(20)NO访问的数据微块数量
    DATA_BLOCK_CACHE_HITbigint(20)NO命中数据微块 Cache 数量
    INDEX_BLOCK_READ_CNTbigint(20)NO访问的中间层微块数量
    INDEX_BLOCK_CACHE_HITbigint(20)NO命中中间层微块 Cache 数量
    BLOCKSCAN_BLOCK_CNTbigint(20)NO单边扫描的数据微块数量
    BLOCKSCAN_ROW_CNTbigint(20)NO单边扫描的数据行数
    PUSHDOWN_STORAGE_FILTER_ROW_CNTbigint(20)NO下压存储 Filter 过滤后行数
    REQUEST_MEMORY_USEDbigint(20)NO该请求消耗的内存
    EXPECTED_WORKER_COUNTbigint(20)NO请求期望的工作线程数
    USED_WORKER_COUNTbigint(20)NO请求实际使用的工作线程数
    SCHED_INFOvarchar(16384)YES请求的调度信息
    FUSE_ROW_CACHE_HITbigint(20)NO暂不支持该字段,字段默认为 NULL
    PS_CLIENT_STMT_IDbigint(20)NOPS 语句客户端的 ID 标识
    PS_INNER_STMT_IDbigint(20)NOPS 语句 OceanBase 数据库内部的 ID 标识
    TX_IDbigint(20)NO请求对应的事务的 Hash 值
    SNAPSHOT_VERSIONbigint(20)unsignedNO当前语句的快照读版本号
    REQUEST_TYPEbigint(20)NO请求对应的类型:
  • 0:表示非法
  • 1:表示是一个内部请求
  • 2:表示是一个本地请求,例如,Local 计划
  • 3:表示远程请求
  • 4:表示分布式请求
  • 5:表示 SQL 的 Prepare 请求
  • 6:表示 SQL 的 Execute Stmt 请求
  • IS_BATCHED_MULTI_STMTtinyint(4)NO是否进行 Batch Multi Stmt 的优化
    OB_TRACE_INFOvarchar(4096)NO用户设置的 Trace 信息
    PLAN_HASHbigint(20) unsignedNO执行计划的 Hash 值
    LOCK_FOR_READ_TIMEbigint(20)NO读取数据时等待锁的耗时,单位:微秒
    PARAMS_VALUElongtextNOPS 执行期参数值

    常用的 SQL 介绍

    SQL 的路由信息

    OceanBase 数据库的 SQL 计划类型整体分为如下四类:

    • Local 计划:指事务 Session 和本语句涉及的分区 Leader 在同一 OBServer。可以涉及多个分区,但不允许同一张表内出现多个分区。

    • Remote 计划:指事务 Session 和本语句涉及的分区 Leader 在两个 OBServer 上。可以涉及多个分区,但不允许同一张表内出现多个分区。

    • Distribute 计划:指当前语句的操作涉及多个分区。分区可以分布在一个或多个 OBServer。

    • Uncertain 计划:指在语句开始执行期间,无法确定分区数目的场景。一般存在于全局索引、外键等场景。

    由于单机事务提交的效率比跨机高,用户需要根据实际情况,确认上述计划的比例数是否符合预期。SQL 计划的统计示例语句如下:

    select plan_type, count(1) from GV$OB_SQL_AUDIT where tenant_id = *** and request_time > time_to_usec('2021-10-08 12:00:00') group by plan_type;
    

    plan_type 的取值为 1、2、3、4,分别表示 Local 计划、Remote 计划、Distribute 计划和 Uncertain 计划。

    慢 SQL 统计

    查询一段时间内,耗时超过某个阈值的 SQL,根据查询的结果进行 SQL 计划调优:

    select tenant_id, elapsed_time, usec_to_time(request_time), substr(query_sql, 1, 50) from GV$OB_SQL_AUDIT where tenant_id=1001 and elapsed_time > 100000 and request_time > time_to_usec('2021-10-08 12:00:00') order by elapsed_time desc limit 40;
    

    事务内涉及的 SQL 统计

    sql_audit 里的每条 SQL 预期都记录了当前 SQL 所涉及的事务唯一标识:transaction_hash,可以根据该字段找到当前事务内所有的 SQL 信息,进而基于该信息确定业务压测的事务模型是否符合预期:单 SQL 事务、多 SQL 事务等。

    select tenant_id, substr(query_sql,1,50) from GV$OB_SQL_AUDIT where tenant_id=1002 and  TX_ID='***' order by request_time;
    

    同一个 Session 上执行的 SQL

    基于 SID 可以查询出所有的业务请求,主要用来分析业务模型。

    select tenant_id, substr(query_sql,1,50) from GV$OB_SQL_AUDIT where tenant_id=1002 and sid=1001 and request_time > time_to_usec('2021-10-08 12:00:00') order by request_time;
    「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
    关注作者
    【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论