【OceanBase诊断调优】—— 租户资源统计项及其查询方法

本文主要介绍 OceanBase 数据库中租户资源统计项及其查询方法。

适用版本

OceanBase 数据库 V4.1.x、V4.2.x 版本。

CPU 资源统计项

  • 逻辑 CPU 使用率(线程处理请求的时间占比)。

    通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下,查看租户的 cpu_usage,表示一段时间内(1s)租户工作线程的处理请求时间占比和租户 unit 规格,粗算的逻辑 CPU 使用率,数值代表百分比,例如 400 指的是 400%。

    obclient> SELECT * FROM oceanbase.__all_virtual_sysstat WHERE tenant_id = 1 AND name = 'cpu usage';
    

    输出结果如下:

    +-----------+--------------+----------+------------+-------+------------+---------+-----------+-------+-------------+
    | tenant_id | svr_ip       | svr_port | statistic# | value | value_type | stat_id | name      | class | can_visible |
    +-----------+--------------+----------+------------+-------+------------+---------+-----------+-------+-------------+
    |         1 | xx.xxx.xx.xx |    57234 |        573 |    10 | SET_VALUE  |  140006 | cpu usage |    64 |           1 |
    +-----------+--------------+----------+------------+-------+------------+---------+-----------+-------+-------------+
    
  • 租户线程消耗的 CPU 总时间。

    通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下,查看租户的 cpu_time,不管是否开启 cgroup,都能获取到 cpu time 的值。区别在于开启了 cgroup 后,会通过 cgroup 功能从 cpuacct.usage 中获取 CPU 时间;否则,不开启 cgroup 。只会通过 /proc/$pid/task/$tid/stat 目录来读取 CPU 时间。

    obclient> SELECT * FROM oceanbase.__all_virtual_sysstat WHERE tenant_id = 1 AND name = 'cpu time';
    

    输出结果如下:

    +-----------+--------------+----------+------------+-------+------------+---------+----------+-------+-------------+
    | tenant_id | svr_ip       | svr_port | statistic# | value | value_type | stat_id | name     | class | can_visible |
    +-----------+--------------+----------+------------+-------+------------+---------+----------+-------+-------------+
    |         1 | xx.xxx.xx.xx |    57234 |        580 |     0 | SET_VALUE  |  140013 | cpu time |    64 |           1 |
    +-----------+--------------+----------+------------+-------+------------+---------+----------+-------+-------------+
    

内存资源统计项

  • mod 内存占用情况。

    通过虚拟表 __all_virtual_memory_info 在 SYS 系统租户下,查询租户的每个 mod_name 的内存占用情况。

    obclient> SELECT * FROM oceanbase.__all_virtual_memory_info WHERE tenant_id = 1 LIMIT 1;
    

    输出结果如下:

    +-----------+--------------+----------+--------+-----------------+----------------+----------+--------+-----------------+-------+-----------+-----------+-------+
    | tenant_id | svr_ip       | svr_port | ctx_id | label           | ctx_name       | mod_type | mod_id | mod_name        | zone  | hold      | used      | count |
    +-----------+--------------+----------+--------+-----------------+----------------+----------+--------+-----------------+-------+-----------+-----------+-------+
    |         1 | xx.xxx.xx.xx |    57234 |      0 | MysqlRequesReco | DEFAULT_CTX_ID | user     |      0 | MysqlRequesReco | zone1 | 146604032 | 146551808 |    33 |
    +-----------+--------------+----------+--------+-----------------+----------------+----------+--------+-----------------+-------+-----------+-----------+-------+
    

    有关 mod 详细信息参见:V$OB_MEMORY 。

  • ctx 和 mod 相关的内存信息。

    通过 observer.log 文件中包含 [MEMORY] 标签的日志,可以查看租户 ctx 和 mod 相关的内存信息,10 秒一次。

    grep "\[MEMORY\]" observer.log*
    

    输出结果如下:

    observer.log.20230203145702002:[MEMORY] tenant_id= 1001 ctx_id=           DEFAULT_CTX_ID hold=    374,960,128 used=    337,967,264 limit= 9,223,372,036,854,775,807
    observer.log.20230203145702002:[MEMORY] idle_size=         0 free_size=         0
    observer.log.20230203145702002:[MEMORY] wash_related_chunks=         0 washed_blocks=         0 washed_size=         0
    observer.log.20230203145702002:[MEMORY] hold=    100,143,104 used=    100,086,048 count=      37 avg_used=      2,705,028 block_cnt=      37 chunk_cnt=      37 mod=IoControl
    observer.log.20230203145702002:[MEMORY] hold=     80,019,456 used=     80,000,000 count=       1 avg_used=     80,000,000 block_cnt=       1 chunk_cnt=       1 mod=MysqlRequesReco
    observer.log.20230203145702002:[MEMORY] hold=     41,963,520 used=     41,943,040 count=       1 avg_used=     41,943,040 block_cnt=       1 chunk_cnt=       1 mod=LogGroupBuffer
    observer.log.20230203145702002:[MEMORY] hold=     18,878,080 used=     17,829,440 count=     129 avg_used=        138,212 block_cnt=     129 chunk_cnt=      12 mod=SqlDtl
    observer.log.20230203145702002:[MEMORY] hold=     16,039,936 used=     16,000,000 count=       2 avg_used=      8,000,000 block_cnt=       2 chunk_cnt=       2 mod=SqlPlanManger
    

IO 资源统计项

  • IO 日志信息有以下几类。

    通过不同的 grep 命令查看。

    • grep "[IO STATUS]" 查看所有租户不同 group 的实时 iops 值(对应 __all_virtual_io_quota 表),有 IO 流量的情况下每秒打印一次。

    • grep "IO STATUS SENDER" 查看 IO 请求的调度信息,包括所有调度线程中排队的IO请求数量和下一个请求发出时间(对应 __all_virtual_io_scheduler 表),每秒打印一次。

    • grep "IO STATUS TRACER" 查看 IO 引用计数统计,用以排查内存泄漏问题(前提是开了 io_trace 配置项),如果 req_count 持续上涨那么可能存在有泄漏的问题,可以通过 backtrace 查看调用栈。

      示例。

      y98u0-gy683-778u3-6783j

  • IO 统计信息的表主要是 __all_virtual_io_quota 表,这个表中实时展示了不同 group 的 iops 情况。

    y98u0-gy683-778u3-6783j

  • IO 调度信息的表主要是 __all_virtual_io_scheduler 表这个表中展示了当前 IO 请求排队和调度信息,包括下一个请求的发送时间。

Session 会话信息统计项

  • 租户 session 会话信息。

    通过查询 __all_virtual_session_info 表,在 SYS 系统租户下,查看租户 session 会话信息。

    SELECT * FROM oceanbase.__all_virtual_session_info WHERE tenant = 'sys' LIMIT 1;
    

    输出结果如下:

    +------------+------+--------+--------------------+-----------+---------+----------------------------------+------+--------+---------------------------------------------------------------------+--------------+----------+----------+--------------+---------------+----------------+-----------+----------+-----------+------------+------------------------------------+-----------+-----------+-------------+
    | id         | user | tenant | host               | db        | command | sql_id                           | time | state  | info                                                                | svr_ip       | svr_port | sql_port | proxy_sessid | master_sessid | user_client_ip | user_host | trans_id | thread_id | ssl_cipher | trace_id                           | ref_count | backtrace | trans_state |
    +------------+------+--------+--------------------+-----------+---------+----------------------------------+------+--------+---------------------------------------------------------------------+--------------+----------+----------+--------------+---------------+----------------+-----------+----------+-----------+------------+------------------------------------+-----------+-----------+-------------+
    | 3221487625 | root | sys    | xx.xxx.xx.xx:xxxxx | oceanbase | Query   | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |    0 | ACTIVE | select * from __all_virtual_session_info where tenant='sys' limit 1 | xx.xxx.xx.xx |    57234 |    57235 |         NULL |          NULL | xx.xxx.xx.xx   | %         |        0 |    117243 | NULL       | xxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-x-x |         0 |           |             |
    +------------+------+--------+--------------------+-----------+---------+----------------------------------+------+--------+---------------------------------------------------------------------+--------------+----------+----------+--------------+---------------+----------------+-----------+----------+-----------+------------+------------------------------------+-----------+-----------+-------------+
    
  • 租户会话统计数据。

    通过查询 __all_virtual_sesstat 表,在 SYS 系统租户下,查看租户会话统计数据。

    SELECT * FROM oceanbase.__all_virtual_sesstat WHERE tenant_id = 1 LIMIT 1;
    

    输出结果如下:

    +------------+--------------+----------+------------+-----------+-------+-------------+
    | session_id | svr_ip       | svr_port | statistic# | tenant_id | value | can_visible |
    +------------+--------------+----------+------------+-----------+-------+-------------+
    | 3221225472 | xx.xxx.xx.xx |    57234 |          0 |         1 |     1 |           1 |
    +------------+--------------+----------+------------+-----------+-------+-------------+
    
  • 租户 session 会话等待情况。

    通过查询 __all_virtual_session_wait 表,在 SYS 系统租户下,查看租户 session 会话等待情况。

    SELECT * FROM oceanbase.__all_virtual_session_wait WHERE tenant_id = 1 LIMIT 1;
    

    输出结果如下:

    +------------+--------------+----------+-----------+----------+--------+-----+--------+-----+--------+----+-------+---------------+-------------+------------+-------------------+-----------------+----------------------+----------------------------+
    | session_id | svr_ip       | svr_port | tenant_id | event    | p1text | p1  | p2text | p2  | p3text | p3 | level | wait_class_id | wait_class# | wait_class | state             | wait_time_micro | time_remaining_micro | time_since_last_wait_micro |
    +------------+--------------+----------+-----------+----------+--------+-----+--------+-----+--------+----+-------+---------------+-------------+------------+-------------------+-----------------+----------------------+----------------------------+
    | 3221225472 | xx.xxx.xx.xx |    57234 |         1 | sync rpc | pcode  | 257 | size   | 286 |        |  0 |     0 |           107 |           7 | NETWORK    | WAITED KNOWN TIME |       103613812 |                 NULL |                 2410634833 |
    +------------+--------------+----------+-----------+----------+--------+-----+--------+-----+--------+----+-------+---------------+-------------+------------+-------------------+-----------------+----------------------+----------------------------+
    
  • 租户 session 会话等待历史记录。

    通过查询 __all_virtual_session_wait_history 表,在 SYS 系统租户下,查看租户 session 会话等待历史记录。

    SELECT * FROM oceanbase.__all_virtual_session_wait_history WHERE tenant_id = 1 LIMIT 1;
    

    输出结果如下:

    +------------+--------------+----------+------+-----------+--------+----------+--------+-----+--------+-----+--------+----+-------+-----------------+----------------------------+------------+
    | session_id | svr_ip       | svr_port | seq# | tenant_id | event# | event    | p1text | p1  | p2text | p2  | p3text | p3 | level | wait_time_micro | time_since_last_wait_micro | wait_time  |
    +------------+--------------+----------+------+-----------+--------+----------+--------+-----+--------+-----+--------+----+-------+-----------------+----------------------------+------------+
    | 3221225472 | xx.xxx.xx.xx |    57234 |    1 |         1 |     20 | sync rpc | pcode  | 257 | size   | 286 |        |  0 |     0 |       103613812 |                 2442809561 | 10361.3812 |
    +------------+--------------+----------+------+-----------+--------+----------+--------+-----+--------+-----+--------+----+-------+-----------------+----------------------------+------------+

附录:

OceanBase 敏捷诊断工具(OceanBase Diagnostic Tool, 简称obdiag) 是一款源代码开源敏捷黑屏诊断工具,可以对OceanBase集群进行一键集群巡检、一键分析、一键根因分析以及一键诊断信息收集。

obdiag 下载地址:https://www.oceanbase.com/softwarecenter

obdiag 官方文档:https://www.oceanbase.com/docs/obdiag-cn

obdiag github地址:https://github.com/oceanbase/obdiag

obdiag SIG 文档:https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/imzr6c

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691661.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 提交项目到github(本地没有该项目)

流程简介 申请github账号(如果有请跳过) add repository创建项目开心的提交就好 具体过程 1. 申请账号(本部分不做介绍,请自行研究) 2. 如果有账号,按照下面图片依次操作就好 点击该图中的New reposito…

ElasticSearch集群环境

ElasticSearch集群环境 1、Linux单机 下载地址:LINUX X86_64 (elastic.co) 下载之后进行解压 tar -zxf elasticsearch-7.8.0-linux-x86_64.tar.gz 名字太长了改个名字改成es mv elasticsearch-7.8.0 es因为安全问题,Elasticsearch 不允许 root 用户…

工程师工具箱系列(2)hasor

文章目录 工程师工具箱系列(2)hasor简介特点环境准备引入依赖数据库脚本文件配置Hasor配置 运行测试小结 工程师工具箱系列(2)hasor 简介 Hasor有着自己的独立的生命周期与Spring的不同,是一套完整的体系,提供了注入DataQL、Dataway、hasor-web等等&am…

AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计

文章目录 背景构建自动化内容生产平台系统架构设计架构详细设计流程介绍笔记来源笔记抓取干预 笔记 AIGC 赋能笔记 Rule 改写笔记特征库构建 附录Bash Cron 定时任务Golang 与 Pyhon AIGC 实践 小结 背景 在大模型的浪潮下,ChatGPT、Sora、Gemini、文言一心 等新技…

具有CMOS输出,高速响应特点的新型汽车级晶振SG2520CAA

爱普生推出的汽车级晶振SG2520CAA。SG2520CAA是一款CMOS输出的,具有高响应速度的2520封装汽车级晶振,具有低电流消耗,1.6 V至3.63 V的宽工作电压,以及-40C至85C的宽工作温度范围,此外还可提供高达125C的工作温度。符合…

实现红黑树

目录 红黑树的概念 红黑树的节点结构定义 红黑树的插入 红黑树的验证 实现红黑树完整代码 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red 或 Black 。 通过对 任何一条从根到叶子的…

[BJDCTF2020]ZJCTF,不过如此 1

涉及&#xff1a;php的伪协议、preg_replace函数的漏洞和正则表达式的运用。 解题步骤 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream"))…

7.STL_string(详细)

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版…

FANUC机器人基本保养概述

对于工业机器人来说&#xff0c;定期保养机器人可以延长机器人的使用寿命。对于FANUC机器人来说&#xff0c;FANUC机器人的常规保养周期可以分为日常、三个月、六个月、一年、两年、三年。以下是FANUC机器人的基本保养周期概览&#xff1a; 在实际生产应用中&#xff0c;可以参…

【ORACLE战报】2024.4月最新OCP考试喜报.

课程介绍 DBA数据库管理必备认证&#xff1a;ORACLE OCP 19C 教材下载 ORACLE OCP 19C 官方电子教材 ORACLE OCP 12C官方电子教材 题库下载 ORACLE 19C题库 &#xff08;083384题、082362题&#xff09;-2024答案修正版.rar 所有的收获都是默默耕耘的成果 2024.4月【最新考试成…

加密与CA证书

文章目录 加密与CA证书http协议是不安全的使用对称秘钥进行数据加密非对称秘钥加密CA证书应用补充 加密与CA证书 CA 证书是什么&#xff0c;证书的目的是什么 首先明确一点&#xff0c;CA证书是数字时代中确保身份和数据安全的重要工具&#xff0c;为用户提供了安心、便捷和可…

向量数据库:Chroma

目录 一、Chroma 介绍 二、安装 Chroma 2.1 创建虚拟 python 环境 2.2 安装 Chroma 2.3 运行 Chroma 三、Backend API 一、Chroma 介绍 Chroma是一个开源的嵌入式数据库。Chroma通过使知识(knowledge)、事实(facts)和技能(skills)可插拔&#xff0c;从而简化了大型语言模…