当前位置: 首页 > news >正文

【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

 

相关文章:

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

本文主要介绍 OceanBase 数据库中租户资源统计项及其查询方法。 适用版本 OceanBase 数据库 V4.1.x、V4.2.x 版本。 CPU 资源统计项 逻辑 CPU 使用率(线程处理请求的时间占比)。 通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下,查看…...

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…...

Java类与对象(一)

类的定义与使用 在Java中使用关键字class定义一个类,格式如下: class 类名{// 成员变量/字段/属性//成员方法/行为 }Java中类和c语言中的结构体有点类似, 在Java中类名一般采用大驼峰(每个首字母大写)的形式&#xf…...

python中的装饰器,例子说明

在Python中,嵌套装饰器是指在一个函数上应用多个装饰器。每个装饰器都可以为函数添加一些特定的功能。以下是一个稍微复杂一些的例子,我们将创建一个记录日志和验证权限的嵌套装饰器。 ### 例子:记录日志和权限验证的嵌套装饰器 假设我们正…...

Leetcode经典题目之用队列实现栈

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 目录 1、题目展示2、题目分析3、完整代码演示4、结语 1、题目展示 前面我们了解过如何实现队列…...

DBSCAN聚类算法

目录 背景DBSCAN算法DBSCAN算法原理DBSCAN算法基本步骤DBSCAN算法调优DBSCAN算法优缺点参考文献 背景 如果有车队在某一片区域经常规律性作业,现在要让你来绘制这一片的路网,你会选择让一辆车从头到尾把所有路网跑一遍还是基于历史轨迹点通过技术手段构…...

【tauri】安装

https://blog.csdn.net/freewebsys/article/details/136092092 1 安装nodejs curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh sudo bash nodesource_setup.sh sudo apt install nodejs # 查看版本 node -v2 安装webkit2 sudo apt update sudo apt i…...

(Java)心得:LeetCode——19.删除链表的倒数第 N 个节点

一、原题 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…...

树莓派安装opencv

安装opencv 上述步骤完成后,输入以下代码(基于python3) sudo apt-get install python3-opencv -y不行的话,试试换源,然后 sudo apt-get update成功! 测试opencv是否安装成功 输入 python3 然后再输入 import cv2 没有报错就…...

bert 的MLM框架任务-梯度累积

参考:BEHRT/task/MLM.ipynb at ca0163faf5ec09e5b31b064b20085f6608c2b6d1 deepmedicine/BEHRT GitHub class BertConfig(Bert.modeling.BertConfig):def __init__(self, config):super(BertConfig, self).__init__(vocab_size_or_config_json_fileconfig.get(vo…...

Nginx配置/.well-known/pki-validation/

当你需要在Nginx上配置.well-known/pki-validation/时,这通常是为了支持SSL证书的自动续订或其他验证目的。以下是配置步骤: 创建目录结构: 在你的网站根目录下创建一个名为.well-known的目录(SSL证书申请之如何创建/.well-known/…...

iOS LQG开发框架(持续更新)

基本规则 开发便利性为前提,妥协性能可维护性为前提可读性MVC各部分职责一定要清晰,controll类里面功能尽量抽离成helper,功能一定要清晰,这个非常重要,对代码可读性提升非常高方法内部尽量使用局部变量,最…...

Python 自动化脚本系列:第3集

21. 使用 cryptography 自动化文件加密 Python 的 cryptography 库提供了一种安全的方式,使用对称加密算法对文件进行加密和解密。你可以自动化加密和解密文件的过程来保护敏感数据。 示例:文件加密和解密 假设你想使用对称加密算法加密一个文件&…...

Matlab-粒子群优化算法实现

文章目录 一、粒子群优化算法二、相关概念和流程图三、例题实现结果 一、粒子群优化算法 粒子群优化算法起源于鸟类觅食的经验,也就是一群鸟在一个大空间内随机寻找食物,目标是找到食物最多的地方。以下是几个条件: (1) 所有的鸟都会共享自己的位置以及…...

python 新特性

文章目录 formatted字符串字面值formatted字符串支持 字符串新方法变量类型标注二进制表示中数字为1的数量统计字典的三个方法新增mapping属性函数zip()新增strict参数dataclass字典合并match 语法 formatted字符串字面值 formatted字符串是带有’f’字符前缀的字符串&#xf…...

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照,另一种是AOF日志。RDB快照是一次全量备份,AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据,在存储上比较紧凑;AOF日志记录的是对内存数据修改的指令文本记录…...

Oracle闪回数据库【Oracle闪回技术】(二)

理解Oracle闪回级别【Oracle闪回技术】(一)-CSDN博客 Oracle默认是不开启闪回数据库的。如果开启闪回数据库的前提条件是,开启Oracle归档模式并启用闪回恢复区。 因为闪回日志文件存放在闪回恢复区中,如果在RAC环境下,必须将闪回恢复区存储在集群文件或者ASM文件中。 一…...

简单负载均衡

题目描述 某工程师为了解决服务器负载过高的问题,决定使用多个服务器来分担请求消息。 现给定 k 台服务器(编号从 1 到 k),以及一批请求消息的信息,格式为到达时刻 负载大小,消息说明: 每个时刻…...

Portforge:一款功能强大的轻量级端口混淆工具

关于Portforge Portforge是一款功能强大的轻量级端口混淆工具,该工具使用Crystal语言开发,可以帮助广大研究人员防止网络映射,这样一来,他人就无法查看到你设备正在运行(或没有运行)的服务和程序了。简而言…...

1.8. 离散时间鞅-无界停时定理与随机游走

无界停时定理与随机游走 无界停时定理与随机游走1. 无界停时定理1.1. 一致可积1.2. 非一致可积2. 应用于随机游动-鞅方法2.1. 随机游走构造的鞅2.2. 对称简单随机游走无界停时定理与随机游走 1. 无界停时定理 本节给出一致可积下鞅的无界停时定理,说明一致可积下鞅的停止过程…...

Google Pixel4手机刷机+Root+逆向环境详细教程

Google Pixel4手机刷机Root逆向环境配置详细教程 刷机工具下载 Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magis…...

IT项目管理-小题计算【太原理工大学】

1.合同总价问题 问承包商的利润是? 实际利润目标利润(目标成本-实际成本)*卖方分担比例 解:10 000(100 000 - 90 000)* 0.2 12 000(元) 实际成本有时也写作最终成本,问承…...

ARP欺骗使局域网内设备断网

一、实验准备 kali系统:可使用虚拟机软件模拟 kali虚拟机镜像链接:https://www.kali.org/get-kali/#kali-virtual-machines 注意虚拟机网络适配器采用桥接模式 局域网内存在指定断网的设备 二、实验步骤 打开kali系统命令行:ctrlaltt可快…...

Android动画(四):PathMeasure实现路径动画

文章概览 1 PathMeasure概述2 实现路径加载动画3 实现箭头加载动画4 实现操作成功动画 本系列将介绍以下内容: Android动画 1 PathMeasure概述 PathMeasure是一个单独的类,其全部源码如下(请详细研读注释): package…...

HTTP 连接详解

概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序 TCP(Transmission Control Protocol&…...

练习题(2024/5/12)

1二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…...

Day50代码随想录动态规划part12:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

Day50 动态规划part12 股票问题 309.最佳买卖股票时机含冷冻期 leetcode题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 题意:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算…...

【软考】scrum的步骤

目录 1. 明确产品愿景和需求2. 制定计划和任务列表3. 进行迭代开发(Sprint)4. Sprint评审会议5. Sprint回顾会议6. 重复迭代 1. 明确产品愿景和需求 1.这个过程通常由项目所有者和利益相关者参与,目的是确保整个团队对项目的目标和方向有清晰…...

【C语言】编译与链接

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:C语言 个人主页:Celias blog~ 目录 引言 一、翻译环境 1.1 编译 1.1.1 预处理 1.1.2 编译 …...

Consul 注册的服务地址变成了 127.0.1.1

问题 我们的服务一直用 Consul 作为注册中心,在 AWS 和 阿里云上使用的时候,没出现过问题。最近把一些服务迁到腾讯云的时候,遇到一个问题:注册的服务地址都是 127.0.1.1。 127.0.1.1 这个地址我们平时遇到的比较少,…...