暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

如何使用Tsar监控OceanBase社区版3.1.3性能并对租户内存进行调优

原创 shunwah 2022-04-27
1342

如何使用Tsar监控OceanBase社区版3.1.3性能并对租户内存进行简单调优

此内容为参加“OceanBase 性能挑战季开启 | 第三期技术征文大赛等你来战 !“欢迎大家踊跃参与,活动详情:https://www.modb.pro/db/388053

作者:马顺华

从事运维管理工作多年,目前就职于六棱镜(杭州)科技有限公司,熟悉运维自动化、OceanBase部署运维、MySQL 运维以及各种云平台技术和产品。并已获得OceanBase认证OBCA、OBCP证书。

image-20220423161536459

Tsar 是阿里巴巴开源的主机性能采集工具,采用 C 语言开发,对主机性能占用率很低,工作效率非常高。主要用来收集服务器的系统信息(如cpu,io,mem,tcp等)以及应用数据(如squid haproxy nginx等),tsar支持实时查看和历史查看,方便了解应用和服务器的信息!

它类似于sar,能监控和收集服务器和关键应用的信息,支持实时终端显示和集中式数据库存储查询,还能向Nagios发送报警信息。Tsar模块化的设计利于通过开发新模块来扩展新的功能,非常方便。

机器信息

机器类型主机配置备注
OSCentos 7.4 
中控机 /OBDCPU:8C内存:16G
目标机器 /OBserverCPU:8C内存:32G
系统盘 /dev/vda 50GLVS分区、文件系统:EXT4
数据盘 /datadev/vdb 100GGPT分区、文件系统:xfs
事务日志盘 /redodev/vdc 100GGPT分区、文件系统:xfs

机器角色划分

角色机器IP备注
OBD112.127.2.131中控机
OBserver112.127.2.120{2881,2882}, {3881,3882} zone1
 112.127.2.121{2881,2882}, {3881,3882} zone2
 112.127.2.122{2881,2882}, {3881,3882} zone3
OBproxy112.127.2.120{2883,2884} 反向代理
 112.127.2.121{2883,2884} 反向代理
 112.127.2.122{2883,2884} 反向代理
OBAgent112.127.2.120监控采集框架 默认端口 8088、8089
 112.127.2.121监控采集框架 默认端口 8088、8089
 112.127.2.122监控采集框架 默认端口 8088、8089
OBclient112.127.2.131OB命令行客户端
Tsar112.127.2.131Tsar客户端

安装环境部署版本

软件名版本安装方式备注
JDK1.8.0yum安装建议使用 1.8u131 及以上版本
make3.82yum install make 
git1.8.3.1yum 安装 
PythonPython 2.7.5系统自带 
obclient2.0.0-2.el7.x86_64yum安装OBserver客户端工具
oceanbase-ce3.1.3.el7.x86_64yum安装OBserver集群
mysql5.7.16yum安装数据库
Tsar make安装 

一、部署集群


1、使用 OBD 部署 集群

本次使用OceanBase社区版 3.1.3 数据库集群。OceanBase 集群规模为 1:1:1(详细部署请参考之前OBD文章)

[admin@CAIP131 ~]$ obd cluster deploy obce_demo -c obce-demo.yaml
Update OceanBase-community-stable-el7 ok
Update OceanBase-development-kit-el7 ok
Download oceanbase-ce-3.1.3-10100032022041510.el7.x86_64.rpm (47.10 M): 100% [####################################] Time: 0:00:19   2.54 MB/s
Package oceanbase-ce-3.1.3 is available.
Download obproxy-3.2.0-1.el7.x86_64.rpm (7.80 M): 100% [##########################################################] Time: 0:00:03   2.61 MB/s
Package obproxy-3.2.0 is available.
install oceanbase-ce-3.1.3 for local ok
install obproxy-3.2.0 for local ok
+-------------------------------------------------------------------------------------------+
|                                          Packages                                         |
+--------------+---------+-----------------------+------------------------------------------+
| Repository   | Version | Release               | Md5                                      |
+--------------+---------+-----------------------+------------------------------------------+
| oceanbase-ce | 3.1.3   | 10100032022041510.el7 | e96a23de85ba1d53862b9955926194a01d19d0d0 |
| obproxy      | 3.2.0   | 1.el7                 | 8d5c6978f988935dc3da1dbec208914668dcf3b2 |
+--------------+---------+-----------------------+------------------------------------------+
Repository integrity check ok
Parameter check ok
Open ssh connection ok
Remote oceanbase-ce-3.1.3-e96a23de85ba1d53862b9955926194a01d19d0d0 repository install ok
Remote oceanbase-ce-3.1.3-e96a23de85ba1d53862b9955926194a01d19d0d0 repository lib check ok
Remote obproxy-3.2.0-8d5c6978f988935dc3da1dbec208914668dcf3b2 repository install ok
Remote obproxy-3.2.0-8d5c6978f988935dc3da1dbec208914668dcf3b2 repository lib check ok
Cluster status check ok
Initializes observer work home ok
Initializes obproxy work home ok
obce_demo deployed

image-20220419150248190

检查集群部署状态(deployed)

[admin@CAIP131 ~]$ obd cluster list
+------------------------------------------------------------------+
|                           Cluster List                           |
+-----------+------------------------------------+-----------------+
| Name      | Configuration Path                 | Status (Cached) |
+-----------+------------------------------------+-----------------+
| obce_demo | /home/admin/.obd/cluster/obce_demo | deployed        |
+-----------+------------------------------------+-----------------+
[admin@CAIP131 ~]$ 

image-20220419150324507

2、启动和初始化集群boostrap

上文中 deploy 操作只安装了软件和准备初始化目录,还需使用 obd cluster start 命令启动集群节点并初始化集群。

[admin@CAIP131 ~]$ obd cluster start obce_demo
Get local repositories and plugins ok
Open ssh connection ok
Load cluster param plugin ok
Check before start observer ok
Check before start obproxy ok
Start observer ok
observer program health check ok
Connect to observer ok
Initialize cluster
Cluster bootstrap ok
Wait for observer init ok
+------------------------------------------------+
|                    observer                    |
+--------------+---------+------+-------+--------+
| ip           | version | port | zone  | status |
+--------------+---------+------+-------+--------+
| 112.127.2.120 | 3.1.3   | 2881 | zone1 | active |
| 112.127.2.121 | 3.1.3   | 2881 | zone2 | active |
| 112.127.2.122 | 3.1.3   | 2881 | zone3 | active |
+--------------+---------+------+-------+--------+

Start obproxy ok
obproxy program health check ok
Connect to obproxy ok
Initialize cluster
+------------------------------------------------+
|                    obproxy                     |
+--------------+------+-----------------+--------+
| ip           | port | prometheus_port | status |
+--------------+------+-----------------+--------+
| 112.127.2.120 | 2883 | 2884            | active |
| 112.127.2.121 | 2883 | 2884            | active |
| 112.127.2.122 | 2883 | 2884            | active |
+--------------+------+-----------------+--------+
obce_demo running

image-20220419161923234

查看部署后的运行状态(running)

[admin@CAIP131 ~]$ obd cluster list
+------------------------------------------------------------------+
|                           Cluster List                           |
+-----------+------------------------------------+-----------------+
| Name      | Configuration Path                 | Status (Cached) |
+-----------+------------------------------------+-----------------+
| obce_demo | /home/admin/.obd/cluster/obce_demo | running         |
+-----------+------------------------------------+-----------------+

image-20220413174125931

查看部署后的运行状态(active)

[admin@CAIP131 ~]$ obd cluster display obce_demo
Get local repositories and plugins ok
Open ssh connection ok
Cluster status check ok
Connect to observer ok
Wait for observer init ok
+------------------------------------------------+
|                    observer                    |
+--------------+---------+------+-------+--------+
| ip           | version | port | zone  | status |
+--------------+---------+------+-------+--------+
| 112.127.2.120 | 3.1.3   | 2881 | zone1 | active |
| 112.127.2.121 | 3.1.3   | 2881 | zone2 | active |
| 112.127.2.122 | 3.1.3   | 2881 | zone3 | active |
+--------------+---------+------+-------+--------+

Connect to obproxy ok
+------------------------------------------------+
|                    obproxy                     |
+--------------+------+-----------------+--------+
| ip           | port | prometheus_port | status |
+--------------+------+-----------------+--------+
| 112.127.2.120 | 2883 | 2884            | active |
| 112.127.2.121 | 2883 | 2884            | active |
| 112.127.2.122 | 2883 | 2884            | active |
+--------------+------+-----------------+--------+

image-20220419162131537

3、连接验证:(sys租户)

[admin@CAIP131 ~]$ obclient -h112.127.2.122 -uroot@sys#obce_demo -p -P2883 -A -c oceanbase
Enter password: 
Welcome to the OceanBase.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

image-20220419151531546

查看所有节点是否正常:

MySQL [oceanbase]> select svr_ip,status,with_rootserver,usec_to_time(start_service_time),usec_to_time(stop_time) from __all_server;
+--------------+--------+-----------------+----------------------------------+----------------------------+
| svr_ip       | status | with_rootserver | usec_to_time(start_service_time) | usec_to_time(stop_time)    |
+--------------+--------+-----------------+----------------------------------+----------------------------+
| 112.127.2.120 | active |               1 | 2022-04-19 15:04:27.928806       | 1970-01-01 08:00:00.000000 |
| 112.127.2.121 | active |               0 | 2022-04-19 15:04:29.968798       | 1970-01-01 08:00:00.000000 |
| 112.127.2.122 | active |               0 | 2022-04-19 15:04:38.224182       | 1970-01-01 08:00:00.000000 |
+--------------+--------+-----------------+----------------------------------+----------------------------+
3 rows in set (0.002 sec)

image-20220423134641252

1)、status 表示节点状态。

inactive, 表示节点已经掉线或者进程退出了。节点掉线常见原因是节点时钟偏差过大、网络延时过大、clog空间盘满(use大于等于95%)。如果进程刚刚启动,则是进程在跟 rootserver 通信沟通。正常情况下启动几秒就能变 active,异常宕机后的再启动可能需要几十秒变 acitve,最长不超过2分钟。

2)、start_service_time

表示节点开始提供服务时间。如果是默认值 1970-1-1 ,则表示进程还在应用clog、刷新schema等。通常如果要应用的clog不多的时候,这个几秒钟就好了。如果是此前内存中大量数据还没有合并落盘就宕机了,这个恢复时间就长一些,可能会要十几分钟。

3)、stop_service_time

表示停止服务时间。如果是默认值 1970-1-1 ,表示没有停止服务。如果时间大于默认值(在当前时间附近),表示手动发起过 stop server 或 stop zone 命令。则需要手动发起 start server 或者 start zone 命令恢复服务。

4)、只有这三个列都正常了,节点才是正常的,集群才是正常的。

4、创建资源池及租户:

1)查询系统资源总计资源 (sys租户)
[admin@CAIP131 ~]$ obclient -h1112.127.2.122 -uroot@sys#obce_demo -p -P2883 -A -c oceanbase
Enter password: 
Welcome to the OceanBase.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [oceanbase]> SELECT svr_ip,svr_port, cpu_total, mem_total/1024/1024/1024, disk_total/1024/1024/1024, zone FROM __all_virtual_server_stat;
+--------------+----------+-----------+--------------------------+---------------------------+-------+
| svr_ip       | svr_port | cpu_total | mem_total/1024/1024/1024 | disk_total/1024/1024/1024 | zone  |
+--------------+----------+-----------+--------------------------+---------------------------+-------+
| 112.127.2.120 |     2882 |        14 |          16.000000000000 |           50.000000000000 | zone1 |
| 112.127.2.121 |     2882 |        14 |          16.000000000000 |           50.000000000000 | zone2 |
| 112.127.2.122 |     2882 |        14 |          16.000000000000 |           50.000000000000 | zone3 |
+--------------+----------+-----------+--------------------------+---------------------------+-------+
3 rows in set (0.029 sec)

image-20220419162524966

2)查询租户已分配资源:
MySQL [oceanbase]> SELECT sum(c.max_cpu), sum(c.max_memory)/1024/1024/1024 FROM __all_resource_pool as a, __all_unit_config AS c WHERE a.unit_config_id=c.unit_config_id;+----------------+----------------------------------+
| sum(c.max_cpu) | sum(c.max_memory)/1024/1024/1024 |
+----------------+----------------------------------+
|              5 |                   4.799999999813 |
+----------------+----------------------------------+
1 row in set (0.016 sec)

MySQL [oceanbase]> SELECT * FROM oceanbase.__all_unit_config;
+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
| gmt_create                 | gmt_modified               | unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num     |
+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
| 2022-04-19 16:16:20.980444 | 2022-04-19 16:16:20.980444 |              1 | sys_unit_config |       5 |     2.5 | 5153960755 | 4294967296 |    10000 |     5000 |   53687091200 | 9223372036854775807 |
+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
1 row in set (0.005 sec)

image-20220419162617363

3)创建资源单元(unitS1 ):
MySQL [oceanbase]> CREATE RESOURCE UNIT unitS1 max_cpu = 4, max_memory = '6G', min_memory = '6G', max_iops = 100000, min_iops = 100000, max_session_num = 30000, max_disk_size = '20G';
Query OK, 0 rows affected (0.007 sec)

image-20220419162723600

4)查看新创建的资源单元(unitS1 )
MySQL [oceanbase]> SELECT unit_config_id,name,max_cpu,min_cpu,max_memory,min_memory,max_disk_size FROM __all_unit_config;
+----------------+-----------------+---------+---------+------------+------------+---------------+
| unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_disk_size |
+----------------+-----------------+---------+---------+------------+------------+---------------+
|              1 | sys_unit_config |       5 |     2.5 | 5153960755 | 4294967296 |   53687091200 |
|           1001 | unitS1          |       4 |       4 | 6442450944 | 6442450944 |   21474836480 |
+----------------+-----------------+---------+---------+------------+------------+---------------+
2 rows in set (0.002 sec)

image-20220419162846691

5)创建资源池(poolS1):
MySQL [oceanbase]> CREATE RESOURCE POOL poolS1 UNIT = 'unitS1', UNIT_NUM = 1;
Query OK, 0 rows affected (0.028 sec)

image-20220419162935277

6)查看资源池(poolS1)
MySQL [oceanbase]> SELECT * FROM oceanbase.__all_resource_pool;
+----------------------------+----------------------------+------------------+----------+------------+----------------+-------------------+-----------+--------------+--------------------+
| gmt_create                 | gmt_modified               | resource_pool_id | name     | unit_count | unit_config_id | zone_list         | tenant_id | replica_type | is_tenant_sys_pool |
+----------------------------+----------------------------+------------------+----------+------------+----------------+-------------------+-----------+--------------+--------------------+
| 2022-04-19 16:16:20.983213 | 2022-04-19 16:16:20.991808 |                1 | sys_pool |          1 |              1 | zone1;zone2;zone3 |         1 |            0 |                  0 |
| 2022-04-19 16:29:16.127638 | 2022-04-19 16:29:16.127638 |             1001 | poolS1   |          1 |           1001 | zone1;zone2;zone3 |        -1 |            0 |                  0 |
+----------------------------+----------------------------+------------------+----------+------------+----------------+-------------------+-----------+--------------+--------------------+
2 rows in set (0.002 sec)

image-20220419163010127

7)创建租户(tenantdemo):
MySQL [oceanbase]> create tenant tenantdemo resource_pool_list=('poolS1'), charset=utf8mb4, replica_num=3, zone_list('zone1', 'zone2', 'zone3'), primary_zone=RANDOM, locality='F@zone1,F@zone2,F@zone3' set variables ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';
Query OK, 0 rows affected (1.296 sec)

image-20220419163237693

将租户的 primary_zone 设置为 RANDOM

8)查看创建成功的租户:
MySQL [oceanbase]> select tenant_id,tenant_name,primary_zone from __all_tenant;

image-20220419163354726

9)登录新创建的 tenantdemo 租户(默认租户密码为空):
[admin@CAIP131 ~]$ obclient -h112.127.2.122 -uroot@tenantdemo#obce_demo -P2883 -c -A oceanbase

image-20220419163535200

10)设置租户 tenantdemo 的root密码
MySQL [oceanbase]> alter user root identified by '#####';
Query OK, 0 rows affected (0.030 sec)

image-20220419163734925

二、配置Tsar监控


总体架构

  • Tsar是基于模块化设计的程序,程序有两部分组成:框架和模块。
  • 框架程序源代码主要在src目录,而模块源代码主要在modules目录中。
  • 框架提供对配置文件的解析,模块的加载,命令行参数的解析,应用模块的接口对模块原始数据的解析与输出。 模块提供接口给框架调用。
  • Tsar依赖与cron每分钟执行采集数据,因此它需要系统安装并启用crond,安装后,tsar每分钟会执行tsar --cron来定时采集信息,并且记录到原始日志文件。

1、检查git工具是否安装

[root@CAIP131 soft]# git --version
git version 1.8.3.1

image-20220420135258318

2、下载Tsar

方法一:

1)从github上下载Tsar源码包

https://github.com/alibaba/tsar

image-20220420115136021

2)将下载好的Tsar源码zip包上传到服务器并解压。
[root@CAIP120 soft]# ls
tsar-master.zip
[root@CAIP120 soft]# unzip -q tsar-master.zip 
[root@CAIP120 soft]# ls
tsar-master  tsar-master.zip

image-20220420164118470

方法二:

从github上使用git工具下载代码Tsar

[root@CAIP131 soft]# git clone https://github.com/alibaba/tsar.git
Cloning into 'tsar'...
remote: Enumerating objects: 2399, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 2399 (delta 2), reused 1 (delta 0), pack-reused 2390
Receiving objects: 100% (2399/2399), 2.40 MiB | 138.00 KiB/s, done.
Resolving deltas: 100% (1559/1559), done.

image-20220420134119297

3、make编译tsar

1)进入tsar目录
[root@CAIP120 tsar-master]# ls
AUTHORS    conf     devel     include  INSTALL   lualib    modules       README.md  src
ChangeLog  COPYING  examples  info.md  luadevel  Makefile  README_cn.md  rpm        tools

image-20220420164213447

2)执行make编译
[root@CAIP131 tsar]# make

image-20220420164313048


image-202204201643303173)执行make install安装

[root@CAIP131 tsar]# make install

image-20220420164429241

安装后生成的文件

Tsar配置文件路径:/etc/tsar/tsar.conf,tsar的采集模块和输出的具体配置; 定时任务配置:/etc/cron.d/tsar,负责每分钟调用tsar执行采集任务; 日志文件轮转配置:/etc/logrotate.d/tsar,每个月会把tsar的本地存储进行轮转; 模块路径:/usr/local/tsar/modules,各个模块的动态库so文件;

image-20220420140823352

Tsar 可以通过编译进行安装。安装后默认每分钟采集一次主机性能,数据存放在 /var/log/ 目录下的 tsar.data 文件中。文件滚动存放,占用空间很小。

image-20220420164555995

4)查看tsar是否正确安装
[root@CAIP131 tsar]# tsar version
Time           ---cpu-- ---mem-- ---tcp-- -----traffic---- --sda--- --dm-0-- --dm-1--  ---load- 
Time             util     util   retran    bytin  bytout     util     util     util     load1   
20/04/22-14:15   0.98    49.74     0.05     2.4K    2.3K     0.39     0.39     0.00      0.07   

MAX              0.98    49.74     0.05     2.4K    2.3K     0.39     0.39     0.00      0.07   
MEAN             0.98    49.74     0.05     2.4K    2.3K     0.39     0.39     0.00      0.07   
MIN              0.98    49.74     0.05     2.4K    2.3K     0.39     0.39     0.00      0.07   

image-20220420141802839

查看tsar帮助help

[root@CAIP131 tsar]# tsar -h
Usage: tsar [options]
Options:
    -check         display last record for alert
    --check/-C     display last record for alert.example:tsar --check / tsar --check --cpu --io
    --watch/-w     display last records in N mimutes. example:tsar --watch 30 / tsar --watch 30 --cpu --io
    --cron/-c      run in cron mode, output data to file
    --interval/-i  specify intervals numbers, in minutes if with --live, it is in seconds
    --list/-L      list enabled modules
    --live/-l      running print live mode, which module will print
    --file/-f      specify a filepath as input
    --ndays/-n     show the value for the past days (default: 1)
    --date/-d      show the value for the specify day(n or YYYYMMDD)
    --merge/-m     merge multiply item to one
    --detail/-D    do not conver data to K/M/G
    --spec/-s      show spec field data, tsar --cpu -s sys,util
    --item/-I      show spec item data, tsar --io -I sda
    --help/-h      help
Modules Enabled:
    --cpu               CPU share (user, system, interrupt, nice, & idle)
    --mem               Physical memory share (active, inactive, cached, free, wired)
    --swap              swap usage
    --tcp               TCP traffic     (v4)
    --udp               UDP traffic     (v4)
    --traffic           Net traffic statistics
    --io                Linux I/O performance
    --pcsw              Process (task) creation and context switch
    --partition         Disk and partition usage
    --tcpx              TCP connection data
    --load              System Run Queue and load average

image-20220420142329377

  • tsar命令行主要担负显示历史数据和实时数据的功能,因此有控制展示模块和格式化输出的参数,默认不带任何参数/选项的情况下,tsar打印汇总信息。
  • tsar命令行主要显示给人看的,所以数据展示中都进行了k/m/g等的进位。
  • tsar命令会在显示20行数据后再次打印各个列的列头,以利于用户理解数据的含义。
  • tsar的列头信息包括2行,第一行为模块名,第二行为列名。
  • tsar输出最后会作min/avg/max的汇总统计,统计所展示中的最小/平均/最大数据。

三、Tsar使用实例


1、Tsar监控系统

查看可用的模块列表(任意一台OBserver)

[root@CAIP120 tsar]# tsar -L
tsar enable follow modules:
    cpu
    mem
    swap
    tcp
    udp
    traffic
    io
    pcsw
    partition
    tcpx
    load

image-20220420165029224

查看指定模块的运行状况,模块是指tsar -L列出来的名称。

2、查看 CPU 性能运行情况

CPU 性能也可以使用 top 命令查看,原理和使用 Tsar 相同。

通常情况下,在数据库很忙时 load 会偏高,user 利用率也会较高。可以使用 top 命令查看是哪类进程。

  • 如果是数据库进程,那基本确认是数据库内部性能问题。
  • 如果 sys 利用率也相对比较高(如超过 20),则需留意 OS 的异常。
  • 如果 wait 利用率相对较高,则需要留意 IO 的性能。

load 的结果里 load1load5 和 load15 分别代表 1 分钟内、5 分钟内和 15 分钟内 load 的平均值,通过这些值可以看出 load 变化趋势。

[root@CAIP120 tsar]# tsar --cpu --load -l -i 3
Time              -----------------------cpu---------------------- -------------------load----------------- 
Time                user     sys    wait    hirq    sirq    util    load1   load5  load15    runq    plit   
20/04/22-16:50:41   7.03    2.43    0.00    0.00    0.13    9.58     4.29    4.29    5.21    6.00    1.3K   
20/04/22-16:50:44   7.96    2.64    0.04    0.00    0.13   10.72     4.34    4.30    5.21   12.00    1.3K   
20/04/22-16:50:47   7.57    2.30    0.00    0.00    0.13   10.00     4.34    4.30    5.21   65.00    1.3K   
20/04/22-16:50:50   7.39    2.51    0.00    0.00    0.04    9.94     4.64    4.36    5.23   41.00    1.3K   
20/04/22-16:50:53   7.35    2.38    0.00    0.00    0.13    9.86     4.27    4.29    5.20   52.00    1.3K   
20/04/22-16:50:56   8.20    2.55    0.04    0.00    0.13   10.88     4.27    4.29    5.20    9.00    1.3K   
20/04/22-16:50:59   7.47    2.55    0.00    0.00    0.17   10.19     4.00    4.24    5.18    4.00    1.3K   
20/04/22-16:51:02   7.68    2.59    0.00    0.00    0.08   10.35     4.00    4.24    5.18    1.00    1.3K   
20/04/22-16:51:05   8.26    2.68    0.00    0.00    0.09   11.03     3.76    4.18    5.15    0.00    1.3K   
20/04/22-16:51:08   7.43    2.59    0.04    0.00    0.13   10.14     3.54    4.13    5.13    5.00    1.3K   
20/04/22-16:51:11   7.22    2.42    0.00    0.00    0.08    9.72     3.54    4.13    5.13    2.00    1.3K   
20/04/22-16:51:14   7.94    2.46    0.00    0.00    0.08   10.49     3.26    4.06    5.10    4.00    1.3K   
20/04/22-16:51:17   7.46    2.56    0.00    0.00    0.09   10.10     3.26    4.06    5.10   11.00    1.3K   
20/04/22-16:51:20   7.39    2.38    0.04    0.00    0.13    9.89     3.00    4.00    5.08   25.00    1.3K   
20/04/22-16:51:23   6.88    2.42    0.00    0.00    0.17    9.48     2.84    3.95    5.05    5.00    1.3K   
20/04/22-16:51:26   7.52    2.51    0.00    0.00    0.08   10.11     2.84    3.95    5.05    3.00    1.3K   
20/04/22-16:51:29   7.24    2.38    0.00    0.00    0.13    9.75     3.09    3.98    5.06    6.00    1.3K   
20/04/22-16:51:32   7.22    2.55    0.00    0.00    0.08    9.86     3.09    3.98    5.06   22.00    1.3K   
20/04/22-16:51:35   7.56    2.46    0.04    0.00    0.13   10.15     2.84    3.91    5.03    9.00    1.3K  

image-20220420165158567

3、查看网络性能

查看网络性能步骤如下:

1)通过 ethtool 命令查看网卡的速度。
[root@CAIP120 tsar]# ethtool  ens192
Settings for ens192:
	Supported ports: [ TP ]
	Supported link modes:   1000baseT/Full 
	                        10000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: No
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Speed: 10000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: off
	MDI-X: Unknown
	Supports Wake-on: uag
	Wake-on: d
	Link detected: yes

image-20220420165249620

2)通过 tsar 命令看网卡实际上传下载速度以及丢包率。

如果下载速度接近或者超过网卡的能力,则表示网卡此刻接近吞吐量瓶颈。

[root@CAIP120 tsar]# tsar --traffic -l -i 3
Time              ---------------------traffic-------------------- 
Time               bytin  bytout   pktin  pktout  pkterr  pktdrp   
20/04/22-16:53:01 180.6K  718.4K  514.00  441.00    0.00    0.00   
20/04/22-16:53:04 185.8K  738.7K  504.00  440.00    0.00    0.00   
20/04/22-16:53:07 178.4K  722.3K  487.00  422.00    0.00    0.00   
20/04/22-16:53:10 165.1K  709.3K  478.00  411.00    0.00    0.00   
20/04/22-16:53:13 194.7K  732.7K  495.00  434.00    0.00    0.00   
20/04/22-16:53:16 175.9K  723.8K  469.00  408.00    0.00    0.00   
20/04/22-16:53:19 171.4K  717.2K  501.00  435.00    0.00    0.00   
20/04/22-16:53:22 179.9K  714.3K  486.00  416.00    0.00    0.00   
20/04/22-16:53:25 175.9K  740.9K  485.00  414.00    0.00    0.00   
20/04/22-16:53:28 178.2K  717.8K  499.00  422.00    0.00    0.00   
20/04/22-16:53:31 173.3K  701.2K  497.00  426.00    0.00    0.00   
20/04/22-16:53:34 190.5K  732.4K  478.00  415.00    0.00    0.00   
20/04/22-16:53:37 166.9K  711.0K  436.00  376.00    0.00    0.00   
20/04/22-16:53:40 165.3K  690.7K  473.00  402.00    0.00    0.00   
20/04/22-16:53:43 175.6K  715.1K  474.00  413.00    0.00    0.00   
20/04/22-16:53:46 176.6K  737.0K  468.00  395.00    0.00    0.00   
20/04/22-16:53:49 165.9K  712.9K  479.00  403.00    0.00    0.00   
20/04/22-16:53:52 176.6K  713.9K  482.00  420.00    0.00    0.00   
20/04/22-16:53:55 188.9K  735.3K  487.00  417.00    0.00    0.00 

image-20220420165424403

在分析带宽流量的时候,还可以借助 OS 自己的命令:iftop

# 查看网卡 IP 流量
iftop -i ens192 -nNB
# 按快捷键 L 、T 、3 、t 、 B 、l 、 p  找出具体哪个 IP 和 PORT 流量最大

[root@CAIP120 tsar]# iftop -i ens192 -nNB
interface: ens192
IP address is: 172.20.2.120
MAC address is: 00:50:56:81:32:3c

image-20220420170000869

image-20220420165918903

4、查看内存性能

Memory 主要关注 free、buffer 和 cache 的变化是否正常。通常运行一段时间后数据库主机的内存分布就会较为固定。如有异常变化,还需要结合其他信息判断。

[root@CAIP120 tsar]# tsar --mem -l -i 3
Time              -----------------------mem---------------------- 
Time                free    used    buff    cach   total    util   
20/04/22-17:00:33  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:36  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:39  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:42  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:45  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:48  10.1G   19.3G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:51  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:54  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:00:57  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:01:00  10.1G   19.2G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:01:03  10.1G   19.3G  147.0M    2.0G   31.4G   61.31   
20/04/22-17:01:06  10.1G   19.3G  147.0M    2.0G   31.4G   61.31   
20/04/22-17:01:09  10.1G   19.3G  147.0M    2.0G   31.4G   61.31   
20/04/22-17:01:12  10.1G   19.3G  147.0M    2.0G   31.4G   61.30   
20/04/22-17:01:15  10.1G   19.3G  147.0M    2.0G   31.4G   61.30   
20/04/22-17:01:18  10.1G   19.3G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:01:21  10.1G   19.3G  147.0M    2.0G   31.4G   61.29   
20/04/22-17:01:24  10.1G   19.3G  147.0M    2.0G   31.4G   61.30   
20/04/22-17:01:27  10.1G   19.3G  147.0M    2.0G   31.4G   61.29   
Time              -----------------------mem----------------------

image-20220420170201186

5、查看 IO 性能

查看 IO 性能步骤如下:

1)确认当前的磁盘分区、文件系统设置等,可通过 fdiskmount 和 df -h 命令查看。

image-20220420170301267

[root@CAIP120 mapper]# ll /dev/mapper/centos_caip120-swap
lrwxrwxrwx 1 root root 7 Apr 10 16:50 /dev/mapper/centos_caip120-swap -> ../dm-1
[root@CAIP120 mapper]# ll /dev/mapper/centos_caip120-root
lrwxrwxrwx 1 root root 7 Apr 10 16:50 /dev/mapper/centos_caip120-root -> ../dm-0

image-20220420170453299

2)找到数据库数据和文件所在的磁盘,使用 tsar 命令观察 IO 性能。

说明 您应事先对磁盘的吞吐能力和响应时间水平有所了解。

 [root@CAIP120 mapper]# tsar --io -I dm-0 -l -i 3
Time              ------------------------------------------------------------------dm-0------------------------------------------------------------------  
Time               rrqms   wrqms   %rrqm   %wrqm      rs      ws   rsecs   wsecs  rqsize  rarqsz  warqsz  qusize   await  rawait  wawait   svctm    util    
20/04/22-17:06:36   0.00    0.00    0.00    0.00    0.00    0.67    0.00  178.67  134.00    0.00  134.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:06:39   0.00    0.00    0.00    0.00    0.00    3.33    0.00   26.67    4.00    0.00    4.00    0.00    0.90    0.00    0.90    0.10    0.03    
20/04/22-17:06:42   0.00    0.00    0.00    0.00    0.00    1.67    0.00   13.33    4.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:06:45   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:06:48   0.00    0.00    0.00    0.00    0.00    1.33    0.00   10.67    4.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:06:51   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:06:54   0.00    0.00    0.00    0.00    0.00    1.00    0.00    8.00    4.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:06:57   0.00    0.00    0.00    0.00    0.00    1.67    0.00   13.33    4.00    0.00    4.00    0.00    0.20    0.00    0.20    0.20    0.03    
20/04/22-17:07:00   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:07:03   0.00    0.00    0.00    0.00    0.00   18.00    0.00  146.67    4.07    0.00    4.07    0.00    0.61    0.00    0.61    0.06    0.10    
20/04/22-17:07:06   0.00    0.00    0.00    0.00    0.00   17.67    0.00  141.33    4.00    0.00    4.00    0.00    0.38    0.00    0.38    0.02    0.03    
20/04/22-17:07:09   0.00    0.00    0.00    0.00    0.00    1.67    0.00   13.33    4.00    0.00    4.00    0.00    0.60    0.00    0.60    0.20    0.03    
20/04/22-17:07:12   0.00    0.00    0.00    0.00    0.00   15.67    0.00  322.67   10.30    0.00   10.30    0.00    0.89    0.00    0.89    0.02    0.03    
20/04/22-17:07:15   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:07:18   0.00    0.00    0.00    0.00    0.00    1.00    0.00    8.00    4.00    0.00    4.00    0.00    0.67    0.00    0.67    0.33    0.03    
20/04/22-17:07:21   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:07:24   0.00    0.00    0.00    0.00    0.00    1.33    0.00   10.67    4.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:07:27   0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    
20/04/22-17:07:30   0.00    0.00    0.00    0.00    0.00    1.00    0.00    8.00    4.00    0.00    4.00    0.00    0.67    0.00    0.67    0.33    0.03    
Time              ------------------------------------------------------------------dm-0------------------------------------------------------------------ 

image-20220420170748982

其中 IO Util 是个比较复杂的参数。

  • 如果是机械盘,这个 Util 可以反映出磁盘的繁忙程度,svctm 会在几毫秒以上。

  • 如果是 SSD 盘,svctm 会在零点几毫秒。

    近似利用率计算公式:利用率 U = 吞吐量 * 每次平均服务时间。所以 SSD 盘需要看响应时间(svctm)和等待时间(await)等信息综合判断是否到瓶颈。

说明 主机的性能是最容易查看的,如果主机在某方面呈现性能瓶颈,数据库的性能和稳定性都会受到影响。 二者之间的联系并不会表现的很直接,需要多观察总结成经验。

四、如何使用 DOOBA 实时监控 OceanBase 数据库租户性能


dooba.py 是采用 Python 语言编写的脚本,其作用是实时读取 OceanBase 数据库租户的性能。

Oracle 数据库中有 AWR 报表,方便诊断人员快速了解数据库在某个时间点的性能问题和原因。AWR 依赖很多内部视图,其中部分视图在 OceanBase 数据库里也存在,但是 OceanBase 数据库暂时还没有支持 AWR 报表。OceanBase 运维平台 OCP 里提供了丰富的性能展示功能,方便对 OceanBase 数据库进行诊断。

OceanBase 数据库里也记录了会话和 SQL 的等待事件,但这一块功能还不是很成熟,大部分性能问题只要分析 SQL 就能解决,所以等待事件可暂不理会。

OceanBase 数据库的 SQL 诊断建议关注租户的 QPS(每秒 SQL 请求数,包括 SELECT、INSERT、UPDATE、DELETE)以及其 RT(SQL 执行耗时)、TPS(每秒事务数,和 Oracle 一致)以及其 RT(事务提交延时)。

此外,还需关注 OceanBase 集群节点上的性能信息。OceanBase 集群的性能瓶颈首先不会出现在 IO,而更容易出现在内存,其次是 CPU。所以还需要关注每秒内存的变化,具体是指增量内存的使用情况。

使用 OceanBase 数据库自带的命令行监控脚本 DOOBA 可以实时观察 OceanBase 数据库租户性能。

1、创建DOOBA的python脚本

dooba 脚本在 /home/admin/oceanbase/bin/ ,是 python 脚本

image-20220420173305958

使用sys租户登录

[admin@CAIP120 bin]$ python dooba.py -h 112.127.2.122 -uobtsar@sys#obce_demo -P2883 -p***

image-20220423152806979

2、查看dooba帮助及视图

dooba 进去后,默认是sys租户。总览里的NET TAB没有意义可以删除以节省屏幕空间。

运行之后,按 1 可查看帮助。

  Help                                                                                                                                                                    Shown: 0 / Valid: 0 / Total: 0

    Global Keys  -  oceanbase
  ----------------------------------------------
        c             : Switch between tenants
        w             : write a screenshot file to current window

    Global Keys  -  Widget
  ----------------------------------------------
        Tab           : Select next widget
        m             : Connect to oceanbase lms for this cluster using mysql
        j             : ssh to selected host

    Global Keys  -  Page
  ----------------------------------------------
        1 F1          : Help page
        2 F2          : Gallery page
        3 F3          : Observer page
        4 F4          : History page
        d             : Delete selected widget
        R             : Restore deleted widgets
        =             : Filter Columns for current page (ms,cs,ups page only)

    Global Keys  -  Test
  ----------------------------------------------
        p             : Messsage box tooltips

    Global Keys  -  Selection Box
  ----------------------------------------------
        DOWN TAB J P  : Next item
        UP K N        : Previous item
        SPC ENTER     : Select current item
        Q q           : Quit selection box

    Global Keys  -  System
  ----------------------------------------------
        q             : quit dooba

    Support
  ----------------------------------------------
        Author        : Yudi Shi (fufeng.syd)
        Mail          : fufeng.syd@alipay.com

        project page  :
        bug report    :
        feature req   :

image-20220420175818735

使用最多的快捷键如下:

  • 1:查看帮助。
  • 2:查看租户性能总览。
  • 3:查看各个节点的性能总览,但节点多的时候会展示不全。
  • c:选择租户。通常需要在观察业务租户时使用。
  • tab:在各个 TAB 之间跳转。
  • d:删除当前 TAB,在屏幕显示不够时使用。
  • R:恢复所有的 TAB。

image-20220420180012471

image-20220420180223892


3、性能指标说明

通过查看脚本内容可以知道各个指标缩写的含义,其数据多取自于视图 gv$sysstat,各项指标如下:

一级分类二级分类缩写全称含义
GallerySQL COUNT(租户 SQL QPS 数据)SEL.sql select count平均每秒查询次数
GallerySQL COUNT(租户 SQL QPS 数据)INS.sql insert count平均每秒插入次数
GallerySQL COUNT(租户 SQL QPS 数据)UPD.sql update count平均每秒更新次数
GallerySQL COUNT(租户 SQL QPS 数据)DEL.sql delete count平均每秒删除次数
GallerySQL COUNT(租户 SQL QPS 数据)REP.sql replace count平均每秒替换次数
GallerySQL COUNT(租户 SQL QPS 数据)CMT.trans commit count平均每秒事务提交次数
GallerySQL COUNT(租户 SQL QPS 数据)ROL.trans rollback count平均每秒事务回滚次数
GallerySQL RT(租户 SQL 延时数据)SEL.sql select time平均每次查询耗时
GallerySQL RT(租户 SQL 延时数据)INS.sql insert time平均每次插入耗时
GallerySQL RT(租户 SQL 延时数据)UPD.sql update time平均每次更新耗时
GallerySQL RT(租户 SQL 延时数据)DEL.sql delete time平均每次删除耗时
GallerySQL RT(租户 SQL 延时数据)REP.sql replace time平均每次替换耗时
GallerySQL RT(租户 SQL 延时数据)CMT.trans commit time平均每次事务提交延时
GalleryMEMORY(T)(租户内存性能数据)⊿ACTIVEactive memstore used平均每秒增量内存变化量
GalleryMEMORY(T)(租户内存性能数据)TOTALtotal memstore used增量内存累计总量
GalleryMEMORY(T)(租户内存性能数据)PCT.total memstore used增量内存占比
GalleryIOPS(集群的 IO 性能数据)SES.active sessions当前活跃会话数
GalleryIOPS(集群的 IO 性能数据)IORio read count平均每秒读 IO 次数
GalleryIOPS(集群的 IO 性能数据)IOR-SZio read bytes平均每次读 IO 大小
GalleryIOPS(集群的 IO 性能数据)IOWio write count平均每秒写 IO 次数
GalleryIOPS(集群的 IO 性能数据)IOW-SZio write bytes平均每次写 IO 大小
SQL Pagezone(每个节点的性能数据)Active Sessactive sessions租户在该节点当前活跃会话数
SQL Pagezone(每个节点的性能数据)CPUcpu usage租户在该节点的 CPU 利用率(相对值)
SQL Pagezone(每个节点的性能数据)Cache-BI Hitblock index cache hit租户在该节点数据块的索引块的命中率
SQL Pagezone(每个节点的性能数据)Cache-Blk Hitblock cache hit租户在该节点数据块的命中率
SQL Pagezone(每个节点的性能数据)Cache-Loc Hitlocation cache hit租户分区在该节点位置缓存命中率
SQL Pagezone(每个节点的性能数据)Cache-Row Hitrow cache hit租户分区在该节点行缓存命中率
SQL Pagezone(每个节点的性能数据)IO-R Cntio read count租户在该节点平均每秒读 IO 次数
SQL Pagezone(每个节点的性能数据)IO-R Sizeio read bytes租户在该节点平均每次读 IO 大小
SQL Pagezone(每个节点的性能数据)IO-W Cntio write count租户在该节点平均每次写 IO 次数
SQL Pagezone(每个节点的性能数据)IO-W Sizeio write bytes租户在该节点平均每次写 IO 大小
SQL PageSQL(每个节点的 SQL 性能数据)SSCsql select count租户在该节点平均每秒查询次数
SQL PageSQL(每个节点的 SQL 性能数据)SSRTsql select time租户在该节点平均每次查询耗时
SQL PageSQL(每个节点的 SQL 性能数据)SICsql insert count租户在该节点平均每秒插入次数
SQL PageSQL(每个节点的 SQL 性能数据)SIRTsql insert time租户在该节点平均每次插入耗时
SQL PageSQL(每个节点的 SQL 性能数据)SUCsql update count租户在该节点平均每秒更新次数
SQL PageSQL(每个节点的 SQL 性能数据)SURTsql update time租户在该节点平均每次更新耗时
SQL PageSQL(每个节点的 SQL 性能数据)SDCsql delete count租户在该节点平均每秒删除次数
SQL PageSQL(每个节点的 SQL 性能数据)SDRTsql delete time租户在该节点平均每次删除耗时
SQL PageSQL(每个节点的 SQL 性能数据)SRCsql replace count租户在该节点平均每秒替换次数
SQL PageSQL(每个节点的 SQL 性能数据)SRRTsql replace time租户在该节点平均每次替换耗时
SQL PageSQL(每个节点的 SQL 性能数据)TCCtrans commit count租户在该节点平均每秒事务提交次数
SQL PageSQL(每个节点的 SQL 性能数据)TCRTtrans commit time租户在该节点平均每次事务提交延时
SQL PageSQL(每个节点的 SQL 性能数据)SLCsql local count租户在该节点平均每秒本地 SQL 次数
SQL PageSQL(每个节点的 SQL 性能数据)SRCsql remote count租户在该节点平均每秒远程 SQL 次数

租户在该节点平均每秒远程 SQL 次数

这些指标可以解答如下问题:

  • 是不是每个节点都在提供读写服务?性能分别如何?
  • 连接数达到多少了?每个节点是多少?
  • IO 吞吐量有多少?每个节点是多少?
  • 数据库 SQL 耗时有多少?每个节点是多少?
  • 每个节点的跨节点访问的 SQL 是多少?
  • 每个节点的数据缓存命中率多少?

五、如何对 OceanBase 租户内存进行调优


每个租户的内存默认会有一半用于增量写入(MemStore),剩余的用于基线数据、SQL 执行以及其他等模块。

实际经验中,调优租户内存主要是调整 MemStore 和 SQL 工作区内存大小。

1、查看内存状态:

SELECT /*+ READ_CONSISTENCY(WEAK),query_timeout(100000000) */ TENANT_ID,IP,
          round(ACTIVE/1024/1024/1024,2)ACTIVE_GB,
          round(TOTAL/1024/1024/1024,2) TOTAL_GB,
          round(FREEZE_TRIGGER/1024/1024/1024,2) FREEZE_TRIGGER_GB,
          round(TOTAL/FREEZE_TRIGGER*100,2) percent_trigger,
          round(MEM_LIMIT/1024/1024/1024,2) MEM_LIMIT_GB 
FROM gv$memstore
WHERE tenant_id >1000 OR TENANT_ID=1
ORDER BY tenant_id,TOTAL_GB DESC;

image-20220423154026513

输出

image-20220424092732609

2、调优增量内存

调优租户内存的思路是两方面。

  • 一方面尽可能扩大节点总内存资源、租户内存配额以及 MemStore 内存的比例。MemStore 内存占比默认是 50%,如果写比读多时,这个值可以小范围上调。

  • 另外一方面思路就是调优内存转储,当 MemStore 内存剩余不多的时候,尽可能的转储释放内存。

    以下是示例,具体参数值的大小还要根据实际内存和性能情况微调。

    alter system set memory_limit_percentage = 90;    --  OceanBase 占系统总内存的比例,提高 OceanBase 可用的内存量。默认值是 80, 主机内存大于 256G 时,这个可以设置到 90,最大不要超过 90 。
    alter system set memstore_limit_percentage = 55;  --  memstore 占租户的内存比,尽量增大 memstore 的空间(但是可能对读操作有负面影响)。
    alter system set freeze_trigger_percentage = 40;  --  启动 major/minor freeze 的时机,让转储(minor freeze)尽早启动,memstore 内存尽早释放。
    alter system set minor_freeze_times = 100;        --  minor freeze 的次数,尽量不在测试期间触发 major freeze。
    alter system set minor_warm_up_duration_time = 0;  --  加快 minor freeze
    
    [admin@CAIP120 bin]$ obclient -h112.127.2.122 -uroot@sys#obce_demo -p -P2883 -A -c oceanbase
    Enter password: 
    Welcome to the OceanBase.  Commands end with ; or \g.
    Your MySQL connection id is 2659
    Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22)
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MySQL [oceanbase]> alter system set memory_limit_percentage = 90;
    Query OK, 0 rows affected (0.036 sec)
    
    MySQL [oceanbase]> alter system set memstore_limit_percentage = 55;
    Query OK, 0 rows affected (0.043 sec)
    
    MySQL [oceanbase]> alter system set freeze_trigger_percentage = 40;
    Query OK, 0 rows affected (0.029 sec)
    
    MySQL [oceanbase]> alter system set minor_freeze_times = 100;
    Query OK, 0 rows affected (0.034 sec)
    
    MySQL [oceanbase]> alter system set minor_warm_up_duration_time = 0;
    Query OK, 0 rows affected (0.032 sec)
    

image-20220424093737934

当然,您也可以为租户设置内存写入限速,也有的是应用自身设置内存限速(比如 DataX 就有自己限速的设计)。

3、查看内存模块是否超限

MySQL [oceanbase]> SELECT tenant_id,svr_ip,sum(hold) module_sum
    -> FROM __all_virtual_memory_info
    -> WHERE tenant_id>1000 AND hold<>0 AND
    ->             mod_name NOT IN ( 'OB_KVSTORE_CACHE','OB_MEMSTORE')
    -> GROUP BY tenant_id,svr_ip;
+-----------+--------------+------------+
| tenant_id | svr_ip       | module_sum |
+-----------+--------------+------------+
|      1001 | 112.127.2.120 |  959653072 |
|      1001 | 112.127.2.121 |  927356176 |
|      1001 | 112.127.2.122 |  986964656 |
+-----------+--------------+------------+
3 rows in set (0.041 sec)

image-20220424093826018

4、查看 PLANCACHE 命中率

如果是 OLTP 系统 PLANCACHE 命中率应不低于 90%,运行下述语句查看 PLANCACHE 命中率:

MySQL [oceanbase]> SELECT hit_count,executions,(hit_count/executions) as hit_ratio
    -> FROM v$plan_cache_plan_stat
    -> where (hit_count/executions) < 0.9;
+-----------+------------+-----------+
| hit_count | executions | hit_ratio |
+-----------+------------+-----------+
|         3 |          4 |    0.7500 |
|         7 |          8 |    0.8750 |
|         3 |          4 |    0.7500 |
|         3 |          4 |    0.7500 |
|         3 |          4 |    0.7500 |
|         0 |          1 |    0.0000 |
|         4 |          5 |    0.8000 |
|         8 |          9 |    0.8889 |
|         3 |          4 |    0.7500 |
|         3 |          4 |    0.7500 |
|         3 |          4 |    0.7500 |
|         6 |          7 |    0.8571 |
|         8 |          9 |    0.8889 |
+-----------+------------+-----------+
282 rows in set (0.020 sec)

image-20220423154422863

SELECT hit_count,executions,(hit_count/executions) AS hit_ratio
FROM v$plan_cache_plan_stat
WHERE (hit_count/executions) < 0.9 AND executions > 1000;

image-20220423154509565

5、查看MemStore的使用情况

在调整的过程中也可以使用下面 SQL,通过视图 gv$memstore 观察 MemStore 的使用情况。

MySQL [oceanbase]> SELECT tenant_id, ip, round(active/1024/1024/1024) active_gb, round(total/1024/1024/1024) total_gb, round(freeze_trigger/1024/1024/1024) freeze_trg_gb, round(mem_limit/1024/1024/1024) mem_limit_gb
    ->     , freeze_cnt , round((active/freeze_trigger),2) freeze_pct, round(total/mem_limit, 2) mem_usage
    -> FROM `gv$memstore`
    -> WHERE tenant_id =1001
    -> ORDER BY tenant_id, ip;

image-20220423153759708

输出:

+-----------+--------------+-----------+----------+---------------+--------------+------------+------------+-----------+
| tenant_id | ip           | active_gb | total_gb | freeze_trg_gb | mem_limit_gb | freeze_cnt | freeze_pct | mem_usage |
+-----------+--------------+-----------+----------+---------------+--------------+------------+------------+-----------+
|      1001 | 112.127.2.120 |         0 |        0 |             1 |            3 |          0 |       0.15 |      0.06 |
|      1001 | 112.127.2.121 |         0 |        0 |             1 |            3 |          0 |       0.16 |      0.07 |
|      1001 | 112.127.2.122 |         0 |        0 |             1 |            3 |          0 |       0.15 |      0.06 |
+-----------+--------------+-----------+----------+---------------+--------------+------------+------------+-----------+
3 rows in set (0.033 sec)


image-20220424093902428视图说明:

字段名称类型是否可以为 NULL描述
CON_IDNUMBER(38)NO租户 ID
SVR_IPVARCHAR2(32)NO服务器的 IP
SVR_PORTNUMBER(38)NO服务器端口
ACTIVENUMBER(38)NO当前活跃的 Memtable 的内存占用大小,单位为字节
TOTALNUMBER(38)NO当前所有 Memtable 的内存占用大小,单位为字节
FREEZE_TRIGGERNUMBER(38)NO触发 Memtable 冻结的内存大小,单位为字节
MEM_LIMITNUMBER(38)NOMemtable 的内存大小限制,单位为字节
FREEZE_CNTNUMBER(38)NOMemtable 的冻结次数

通常情况下,要维持 mem_usage 在 90% 以下,如果达到或超过 90%,则有可能触发租户内存写入限速,从而显著降低应用写入速度。

6、调优其他内存

其他内存模块的大小可以查看视图 __all_virtual_memory_info 观察。

MySQL [oceanbase]> select zone, svr_ip, label, ctx_name, mod_name, round(hold/1024/1024) hold_mb, round(used/1024/1024) used_mb, count, alloc_count
    -> from __all_virtual_memory_info
    -> where tenant_id = 1001 and label <> 'OB_MEMSTORE'
    -> order by hold desc limit 10;

image-20220423154922715

输出

+-------+--------------+-----------------+----------------+-----------------+---------+---------+-------+-------------+
| zone  | svr_ip       | label           | ctx_name       | mod_name        | hold_mb | used_mb | count | alloc_count |
+-------+--------------+-----------------+----------------+-----------------+---------+---------+-------+-------------+
| zone3 | 112.127.2.122 | SqlDtl          | DEFAULT_CTX_ID | SqlDtl          |     406 |     401 |  6400 |           0 |
| zone1 | 112.127.2.120 | SqlDtl          | DEFAULT_CTX_ID | SqlDtl          |     389 |     384 |  6130 |           0 |
| zone2 | 112.127.2.121 | SqlDtl          | DEFAULT_CTX_ID | SqlDtl          |     380 |     375 |  5986 |           0 |
| zone3 | 112.127.2.122 | MysqlRequesReco | DEFAULT_CTX_ID | MysqlRequesReco |     206 |     204 |    65 |           0 |
| zone1 | 112.127.2.120 | MysqlRequesReco | DEFAULT_CTX_ID | MysqlRequesReco |     196 |     194 |    60 |           0 |
| zone2 | 112.127.2.121 | MysqlRequesReco | DEFAULT_CTX_ID | MysqlRequesReco |     162 |     160 |    43 |           0 |
| zone3 | 112.127.2.122 | TransAudit      | DEFAULT_CTX_ID | TransAudit      |     100 |     100 |     1 |           0 |
| zone1 | 112.127.2.120 | TransAudit      | DEFAULT_CTX_ID | TransAudit      |     100 |     100 |     1 |           0 |
| zone2 | 112.127.2.121 | TransAudit      | DEFAULT_CTX_ID | TransAudit      |     100 |     100 |     1 |           0 |
| zone3 | 112.127.2.122 | LogAggreBuffer  | DEFAULT_CTX_ID | LogAggreBuffer  |      98 |      96 |  1536 |           0 |
+-------+--------------+-----------------+----------------+-----------------+---------+---------+-------+-------------+
10 rows in set (0.051 sec)

image-20220424094004863

遇到的问题1

在分析带宽流量的时候,还可以借助 OS 自己的命令:iftop。报错

[root@CAIP120 tsar]# iftop -i ens192 -nNB
-bash: iftop: command not found

image-20220420165516564

解决

[root@CAIP120 tsar]# yum install iftop -y

image-20220420165630440

再次分析带宽流量:iftop。可以用

[root@CAIP120 tsar]# iftop -i ens192 -nNB
interface: ens192
IP address is: 112.127.2.120
MAC address is: 00:50:56:81:32:3c

image-20220420170000869

遇到的问题2

创建DOOBA的python脚本
python dooba.py -h 112.127.2.122 -uobtsar@sys#obce_demo -P2883 -p***

报错(未使用SYS租户建用户)

image-20220420174614799

解决(使用SYS租户下的用户)登录

[admin@CAIP120 bin]$ python dooba.py -h 112.127.2.122 -uobtsar@sys#obce_demo -P2883 -p***

如何使用Tsar监控OceanBase社区版3.1.3性能并对租户内存进行调优****测试场景和方法来源网络,实际测试中可能会遇到一些问题。分析这些问题也可以了解OceanBase的特点。我也是初学者,还在不断探索中,希望学习到更多的Oceanbase技能。 在座的都是青年才俊,有句话是这样说,我要向大家学习。欢迎大家在文章评论区反馈留言和我交流学习。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论