华信永道实践:对 OceanBase 做性能测试

2024年 5月 7日 28.1k 0

作者简介:邹阳,数据库工程师。

本次练习目的掌握 OceanBase 集群的常规性能测试好方法,包括:sysbench、tpcc 测试。

本实验使用 OBD 部署3节点3副本集群(1-1-1)

一、部署环境

服务器信息

华信永道实践:对 OceanBase 做性能测试-1

机器和角色划分

华信永道实践:对 OceanBase 做性能测试-2

二、服务器初始化

执行 OceanBase 数据库软件部署前对服务器的相关初始化配置。

25.1.1.100~103 四台服务器均进行如下初始化配置:

2.1安装相关工具软件

yum install epel-release -y

华信永道实践:对 OceanBase 做性能测试-3

yum install -y net-tools lrzsz tree htop dstat sysvinit-tools

华信永道实践:对 OceanBase 做性能测试-4

2.2内核参数修改

	cat >> /etc/sysctl.conf <<EOF
	net.core.somaxconn = 2048
	net.core.netdev_max_backlog = 10000
	net.core.rmem_default = 16777216
	net.core.wmem_default = 16777216
	net.core.rmem_max = 16777216
	net.core.wmem_max = 16777216
	net.ipv4.ip_local_port_range = 3500 65535
	net.ipv4.ip_forward = 0
	net.ipv4.conf.default.rp_filter = 1
	net.ipv4.conf.default.accept_source_route = 0
	net.ipv4.tcp_syncookies = 0
	net.ipv4.tcp_rmem = 4096 87380 16777216
	net.ipv4.tcp_wmem = 4096 65536 16777216
	net.ipv4.tcp_max_syn_backlog = 16384
	net.ipv4.tcp_fin_timeout = 15
	net.ipv4.tcp_max_syn_backlog = 16384
	net.ipv4.tcp_tw_reuse = 1
	net.ipv4.tcp_tw_recycle = 1
	net.ipv4.tcp_slow_start_after_idle=0
	vm.swappiness = 0
	vm.min_free_kbytes = 2097152
	vm.max_map_count=655360
	fs.aio-max-nr=1048576
	EOF

让配置生效

	sysctl -p

华信永道实践:对 OceanBase 做性能测试-5

2.3修改会话变量设置

	cat >> /etc/security/limits.conf <<EOF
	* -   nofile 655360
	* -   nproc 655360
	* -   core  unlimited
	* -   stack unlimited
	EOF

华信永道实践:对 OceanBase 做性能测试-6

2.4关闭防火墙

	systemctl stop firewalld
	systemctl disable firewalld 

2.5关闭 SELinux

setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config

华信永道实践:对 OceanBase 做性能测试-7

2.6创建安装用户

	# 新增普通用户 admin
	useradd admin
	# 改用户密码
	echo "admin:admin" | chpasswd
	# 配置用户admin sudo权限
	visudo

华信永道实践:对 OceanBase 做性能测试-8

2.7修改系统时区

     将系统时区设置为中国的+8区

        tzselect

        分别依次选择 5) Asia、9) China、1) Beijing Time、1) Yes

         vi /etc/profile
           export TZ='Asia/Shanghai'

      #生效修改

           source /etc/profile

2.8初始化目录

# 创建相关目录

	mkdir -p /data 
	mkdir -p /redo
	mkdir -p /home/admin/oceanbase-ce

# 修改目录所有者权限

	chown -R admin:admin /data
	chown -R admin:admin /redo
	chown -R admin:admin /home/admin/oceanbase-ce

华信永道实践:对 OceanBase 做性能测试-9

三、配置时间同步服务(配置完之后,记得重启服务器)

此实验时间同步服务使用 chrony ,其中 obd(25.1.1.100) 同步公网时间服务器,其他3台服务器的时间服务器使用 obd

Chrony 是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony 也可以作为服务端软件为其他计算机提供时间同步服务。Chrony 由两个程序组成,分别是 chronyd 和 chronyc 。chronyd 是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

 Chronyc 提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在 chronyd 实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

NTP 是网络时间协议(Network Time Protocol)的简称,通过 udp 123 端口进行网络时钟同步。RHEL7 中默认使用 chrony 作为时间服务器,也支持 NTP ,需要额外安装。NTP 与 chrony 不能同时存在,只能用其中一个,并将另一个 mask 掉。

3.1服务器端配置

在服务器25.1.1.100上部署 chrony 同步公网时间,同时为内外其他服务器提供时间服务。

#安装 chrony 软件

yum install chrony -y

# 修改配置文件

     vi /etc/chrony.conf

先注释掉默认服务器配置项,修改为如下配置:

server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

#打开允许同步的IP地址段

allow 25.1.1.0/24 

# 重启时间同步服务

systemctl enable chronyd
systemctl restart chronyd

# 查看时间同步源和状态

chronyc sources
chronyc sourcestats

华信永道实践:对 OceanBase 做性能测试-10

3.2客户端配置

在服务器25.1.1.101~103上部署 chrony,以25.1.1.100为时间服务器。

# 安装chrony软件

yum install chrony -y

# 修改配置文件

  vi /etc/chrony.conf

先注释掉默认服务器配置项,修改为如下配置:

server 25.1.1.100 iburst

# 重启时间同步服务

systemctl enable chronyd
systemctl restart chronyd

# 查看时间同步源和状态

chronyc sources
chronyc sourcestats

 华信永道实践:对 OceanBase 做性能测试-11

 四、中控机配置

4.1 安装配置 OBD

使用如下命令下载相关程序包文件:

yum install -y yum-utils

很多情况是不允许连外网的,以下开始离线部署ob测试环境。

1、在可以联网的机器上下载需要的安装包

https://open.oceanbase.com/softwareCenter/community
ob-deploy-*.x86_64.rpm
oceanbase-ce-*.x86_64.rpm
oceanbase-ce-libs-*.x86_64.rpm

2、将离线包上传到中控机

华信永道实践:对 OceanBase 做性能测试-12

3、yum install -y ob-deploy

4、将离线 rpm 包加入到本地镜像

obd mirror clone /home/admin/rpm/*.rpm

华信永道实践:对 OceanBase 做性能测试-13

5、clone 后验证

clone 成功后在对应的 local 目录确认,已将安装包从最初的 /home/admin/rpm 拷贝到 /home/admin/.obd/mirror/local/

华信永道实践:对 OceanBase 做性能测试-14

6、查看 local 仓库镜像的包情况

obd mirror list local

华信永道实践:对 OceanBase 做性能测试-15

7、重点(默认 obd 部署的时候使用在线远程安装,如果要本地安装需删除或者重命名 remote 目录)

pwd
cd /home/admin/.obd/mirror
mv remote/ remote_bak

华信永道实践:对 OceanBase 做性能测试-16

8、配置双机互信

ssh-keygen -t rsa
ssh-copy-id

华信永道实践:对 OceanBase 做性能测试-17

 

4.2配置 YAML 文件

配置文件内容,详见附件。

4.3使用配置文件初始化 OBD

obd cluster deploy obcluster -c obce3.yaml

华信永道实践:对 OceanBase 做性能测试-18

五、启动集群节点并初始化集群

5.1 启动集群

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

obd cluster start obcluster

华信永道实践:对 OceanBase 做性能测试-19

5.2查看启动后的集群状态

obd cluster list

华信永道实践:对 OceanBase 做性能测试-20

5.3检查 OceanBase 集群各个节点进程信息。

OceanBase 是单进程软件,进程名叫 observer ,可以用下面命令查看这个进程。

IPS="25.1.1.101 25.1.1.102 25.1.1.103"
for ob in $IPS;do echo $ob; ssh $ob "ps -ef | grep observer | grep -v grep "; done

华信永道实践:对 OceanBase 做性能测试-21

5.4检查 OceanBase 集群各个节点监听状况。

IPS="25.1.1.101 25.1.1.102 25.1.1.103"
for ob in $IPS;do echo $ob; ssh $ob "netstat -ntlp"; done

华信永道实践:对 OceanBase 做性能测试-22

5.5 使用 obclient 登陆

su - admin
安装obclient
sudo rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm
sudo rpm -ivh obclient-2.0.0-2.el7.x86_64.rpm
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib/' >> ~/.bash_profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib/

5.6并查看当前 server 列表

obclient -h 25.1.1.101 -P 2881 -uroot@sys -p -c -A
use oceanbase;
select zone, svr_ip, svr_port, with_rootserver, status from __all_server order by zone, with_rootserver desc;
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status, usec_to_time(b.stop_time) stop_time, b.build_version
from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
order by a.zone, a.svr_ip;

华信永道实践:对 OceanBase 做性能测试-23

华信永道实践:对 OceanBase 做性能测试-24

5.7通过 obproxy 登陆

obclient -h 25.1.1.100 -P 2883 -uroot@sys#obcluster -p -c -A

华信永道实践:对 OceanBase 做性能测试-25

六、安装配置 sysbench

6.1 安装依赖包

从可以连接互联网的电脑上下载安装包

yumdownloader --destdir=/tmp –resolve  automake  libtool

从 oracle 官网上下载 mysql 5.7 的安装包,别用5.6 安装了在做 config 时会报错。

华信永道实践:对 OceanBase 做性能测试-26

6.2 编译

cd /root
tar zxvf sysbench-1.0.20.tar.gz
cd sysbench-1.0.20
./autogen.sh
./configure --prefix=/usr/sysbench/ --with-mysql-includes=/usr/include/mysql/ --with-mysql-libs=/usr/lib64/mysql/ --with-mysql
make
make install
cp /usr/sysbench/bin/sysbench /usr/local/bin/
/usr/sysbench/bin/sysbenchhelp

华信永道实践:对 OceanBase 做性能测试-27

6.3 修改系统及数据库参数

系统参数设置

sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'
sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"

华信永道实践:对 OceanBase 做性能测试-28

sys 租户设置

obclient -h 25.1.1.100 -P 2883 -uroot@sys#obcluster -p -c -A

 

alter system set enable_auto_leader_switch=false;
alter system set enable_one_phase_commit=false;
alter system set enable_monotonic_weak_read = true;
alter system set weak_read_version_refresh_interval='5s';
alter system _ob_minor_merge_schedule_interval='5s';

 

alter system set memory_limit_percentage = 90;   -- OceanBase 数据库占系统总内存的比例,提高 OceanBase 数据库可用的内存量
alter system set memstore_limit_percentage = 55; -- memstore 占租户的内存比,尽量增大 memstore 的空间(但是可能对读操作有负面影响)
alter system set freeze_trigger_percentage = 70; -- 启动 major/minor freeze 的时机,让转储(minor freeze)尽早启动,memstore 内存尽早释放
alter system set minor_freeze_times = 50;       -- minor freeze 的次数,尽量不在测试期间触发 major freeze
alter system set minor_warm_up_duration_time = 0; -- 加快 minor freeze
 
alter system set merge_thread_count = 32; -- 增大合并的线程数
alter system set minor_merge_concurrency = 8; -- 增大转储的线程数,期望提高转储的速度
alter system set _mini_merge_concurrency = 4; -- 增大 mini_merge 的线程数,期望提高 mini_merge 的速度(默认值为 3)。调大为 8 以后,发现会导致压测中 CPU 使用率有时飙升至 90%,对性能有影响

华信永道实践:对 OceanBase 做性能测试-29

proxy 参数设置

alter proxyconfig set proxy_mem_limited='4G'; --防止 oom,可根据实际环境动态调整
alter proxyconfig set enable_compression_protocol=false; --关闭压缩,降低 CPU 百分率
alter proxyconfig set work_thread_num=32; -- 调整工作线程数,寻找最优性能
alter proxyconfig set enable_compression_protocol=false;
alter proxyconfig set enable_metadb_used=false;
alter proxyconfig set enable_standby=false;
alter proxyconfig set enable_strict_stat_time=false;
alter proxyconfig set use_local_dbconfig=true;

华信永道实践:对 OceanBase 做性能测试-30

查看集群可用资源

OceanBase 集群默认有个内部租户(sys),可以查看和管理集群的资源。查看集群可用资源请使用下面 SQL。

select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free, mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb 
from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
order by a.zone, a.svr_ip
;

华信永道实践:对 OceanBase 做性能测试-31

再查看一下资源分配细节。

select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
   join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
   left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
;

华信永道实践:对 OceanBase 做性能测试-32

#创建资源规格及资源池配置: 

create resource unit test_unit max_cpu=20, max_memory='70g', max_iops=10240, max_disk_size='200g', max_session_num=1024 , min_cpu=10, min_memory='50g', min_iops=1024;
create resource pool test_pool unit='test_unit' , unit_num=1, zone_list=('zone1','zone2','zone3') ;

华信永道实践:对 OceanBase 做性能测试-33

#执行如下命令创建一个租户对象

create tenant test resource_pool_list=('test_pool'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%' ;
select tenant_name from __all_tenant;

华信永道实践:对 OceanBase 做性能测试-34

数据库下租户设置,防止事务超时

obclient -h 25.1.1.100 -P 2883 -uroot@test#obcluster -p -c -A

 

set global ob_timestamp_service='GTS' ;
set global autocommit=ON;
set global ob_query_timeout=36000000000;
set global ob_trx_timeout=36000000000;
set global max_allowed_packet=67108864;
set global ob_sql_work_area_percentage=100;
set global parallel_max_servers=800;
set global parallel_servers_target=800;

 华信永道实践:对 OceanBase 做性能测试-35

6.4 测试(必选)

6.4.1 创建测试数据库及用户

obclient -h 25.1.1.100 -P 2883 -uroot@test#obcluster -p -c -A
 
create database sysbenchdb;
grant all privileges on sysbenchdb.* to u_sysbench identified by '123456';
 
create database sysbenchdb1;
grant all privileges on sysbenchdb1.* to u_sysbench identified by '123456';
 
create database sysbenchdb2;
grant all privileges on sysbenchdb2.* to u_sysbench identified by '123456';
 

华信永道实践:对 OceanBase 做性能测试-36

华信永道实践:对 OceanBase 做性能测试-37

6.4.2 数据预热

cd /usr/sysbench/share/sysbench

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 prepare

华信永道实践:对 OceanBase 做性能测试-38

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb1 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 prepare

华信永道实践:对 OceanBase 做性能测试-39

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb2 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 prepare

华信永道实践:对 OceanBase 做性能测试-40

 

6.4.3 读测试

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-41

 

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb1 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

 华信永道实践:对 OceanBase 做性能测试-42

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb2 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-43

6.4.4 删除测试

sysbench --test=./oltp_delete.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 run

 华信永道实践:对 OceanBase 做性能测试-44

sysbench --test=./oltp_delete.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb1 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 run

华信永道实践:对 OceanBase 做性能测试-45

sysbench --test=./oltp_delete.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb2 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 run

 华信永道实践:对 OceanBase 做性能测试-46

6.4.5 写测试

sysbench --test=./oltp_write_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 run

华信永道实践:对 OceanBase 做性能测试-47

sysbench --test=./oltp_write_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb1 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=2 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 run

华信永道实践:对 OceanBase 做性能测试-48

sysbench --test=./oltp_write_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb2 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=1 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 run

 华信永道实践:对 OceanBase 做性能测试-49

6.4.6 读写测试

sysbench --test=./oltp_read_write.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-50

 

sysbench --test=./oltp_read_write.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb1 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-51

 

sysbench --test=./oltp_read_write.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb2 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=8 --time=300 --report-interval=60 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

 华信永道实践:对 OceanBase 做性能测试-52

6.5 测试(可选)

6.5.1 创建测试数据库及用户

obclient -h 25.1.1.100 -P 2883 -uroot@test#obcluster -p -c -A

 

create database sysbenchdb3;
grant all privileges on sysbenchdb3.* to u_sysbench identified by '123456';

华信永道实践:对 OceanBase 做性能测试-53

6.5.2 数据预热

修改脚本

/usr/sysbench/share/sysbench/oltp_common.lua

华信永道实践:对 OceanBase 做性能测试-54

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb3 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 prepare

华信永道实践:对 OceanBase 做性能测试-55

6.5.3 读测试

sysbench --test=./oltp_read_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb3 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-56

华信永道实践:对 OceanBase 做性能测试-57

6.5.4 删除测试

sysbench --test=./oltp_delete.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb3 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

6.5.5 写测试

sysbench --test=./oltp_write_only.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb3 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-58

6.5.6 读写测试

sysbench --test=./oltp_read_write.lua --mysql-host=25.1.1.100 --mysql-port=2883 --mysql-db=sysbenchdb3 --mysql-user="obcluster:test:u_sysbench" --mysql-password=123456 --tables=4 --table_size=1000000 --threads=12 --time=300 --report-interval=3 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run

华信永道实践:对 OceanBase 做性能测试-59

华信永道实践:对 OceanBase 做性能测试-1

七、TPC-C 测试

7.1 安装 JDK

rpm -ivh jdk-8u321-linux-x64.rpm

华信永道实践:对 OceanBase 做性能测试-61

7.2 解压BenchmarkSQL

unzip benchmarksql-5.0-master.zip

华信永道实践:对 OceanBase 做性能测试-62

mv benchmarksql-5.0-master benchmarksql

华信永道实践:对 OceanBase 做性能测试-63

 

7.3 配置 props.ob

编辑/root/benchmarksql/run/props.ob

db=oracle
driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
conn=jdbc:oceanbase://25.1.1.100:2883/tpcc?useUnicode=true&characterEncoding=utf-8
user=tpcc@test#obcluster
password=password

 

warehouses=2
loadWorkers=2

 

terminals=5
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=1
//Number of total transactions per minute
limitTxnsPerMin=0

 

//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true

 

//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

 

// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1

 

7.4 创建测试数据库

obclient -h 25.1.1.100 -P 2883 -uroot@test#obcluster -p -c -A oceanbase
create database tpcc;
create user tpcc identified by 'password';
grant all privileges on tpcc.* to tpcc ;

 华信永道实践:对 OceanBase 做性能测试-64

7.5 修改脚本报错问题

需要修改如下脚本:

runSQL.sh
runLoader.sh
runBenchmark.sh

这三个文件中的这一行,加载绝对路径。

source funcs.sh $1                     ###############原文件
source /root/benchmarksql/run/funcs.sh $1 ##############修改后

 

7.6 测试普通表

7.6.1 创建表

sh runSQL.sh props.ob sql.common/tableCreates.sql

华信永道实践:对 OceanBase 做性能测试-65

7.6.2 加载数据

sh runLoader.sh props.ob

华信永道实践:对 OceanBase 做性能测试-66

7.6.3 创建索引

 

obclient -h 25.1.1.100 -P 2883 -utpcc@test#obcluster -p -c -A tpcc

 

create index bmsql_customer_idx1 on bmsql_customer (c_w_id, c_d_id, c_last, c_first) local;
create index bmsql_oorder_idx1 on bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id) local;

华信永道实践:对 OceanBase 做性能测试-67

7.6.4 运行测试

sh runBenchmark.sh props.ob

华信永道实践:对 OceanBase 做性能测试-68

7.6.5 查询 SQL

obclient -h 25.1.1.100 -uroot@test#obcluster -P2883 -p -c -A oceanbase
常询top10 SQL
SELECT sql_id, count(*), round(avg(elapsed_time)) avg_elapsed_time, round(avg(execute_time)) avg_exec_time
       FROM gv$sql_audit s
       WHERE 1=1 
        and user_name='tpcc'
        and request_time >= time_to_usec(DATE_SUB(current_timestamp, INTERVAL 30 MINUTE) )
       GROUP BY sql_id
       order by avg_elapsed_time desc limit 10;

华信永道实践:对 OceanBase 做性能测试-69

对 elapsed 时间最长的前三条 sql 进行分析

SELECT sql_id, count(*), round(avg(elapsed_time)) avg_elapsed_time,
                     round(avg(execute_time)) avg_exec_time,
                     s.svr_ip,
                     s.svr_port,
                     s.tenant_id,
                     s.plan_id
                    FROM gv$sql_audit s
                    WHERE 1=1
                     and request_time >= time_to_usec(DATE_SUB(current_timestamp, INTERVAL 30 MINUTE) )
                    GROUP BY sql_id
                   order by avg_elapsed_time desc limit 3;

 华信永道实践:对 OceanBase 做性能测试-70

select distinct query_sql from gv$sql_audit where sql_id='5C9973474F2AF4CB0C20B54B9B49A2D7';

华信永道实践:对 OceanBase 做性能测试-71

select distinct query_sql from gv$sql_audit where sql_id='B1F3DF2C7803B02C326BAB74BB140979';

华信永道实践:对 OceanBase 做性能测试-72

select distinct query_sql from gv$sql_audit where sql_id='F59A700FA168324279B0DBC25E19760F';

华信永道实践:对 OceanBase 做性能测试-73

分析执行计划

obclient -h 25.1.1.100 -P 2883 -utpcc@test#obcluster -p -c -A tpcc
explain SELECT count(*) AS low_stock FROM (   SELECT s_w_id, s_i_id, s_quantity        FROM bmsql_stock        WHERE s_w_id = 1 AND s_quantity < 17 AND s_i_id IN (           SELECT ol_i_id                FROM bmsql_district                JOIN bmsql_order_line ON ol_w_id = d_w_id                 AND ol_d_id = d_id                 AND ol_o_id >= d_next_o_id - 20                 AND ol_o_id < d_next_o_id                WHERE d_w_id = 1 AND d_id = 7        )    )\G;

华信永道实践:对 OceanBase 做性能测试-74

 

explain SELECT count(*) AS low_stock FROM (   SELECT s_w_id, s_i_id, s_quantity        FROM bmsql_stock        WHERE s_w_id = 1 AND s_quantity < 19 AND s_i_id IN (           SELECT ol_i_id                FROM bmsql_district                JOIN bmsql_order_line ON ol_w_id = d_w_id                 AND ol_d_id = d_id                 AND ol_o_id >= d_next_o_id - 20                 AND ol_o_id < d_next_o_id                WHERE d_w_id = 1 AND d_id = 4        )    )\G;

 华信永道实践:对 OceanBase 做性能测试-75

explain SELECT count(*) AS low_stock FROM (   SELECT s_w_id, s_i_id, s_quantity        FROM bmsql_stock        WHERE s_w_id = 1 AND s_quantity < 13 AND s_i_id IN (           SELECT ol_i_id                FROM bmsql_district                JOIN bmsql_order_line ON ol_w_id = d_w_id                 AND ol_d_id = d_id                 AND ol_o_id >= d_next_o_id - 20                 AND ol_o_id < d_next_o_id                WHERE d_w_id = 1 AND d_id = 3        )    )\G;

 华信永道实践:对 OceanBase 做性能测试-76

7.7 测试分区表

  按题目要求,tpcc 规格:100仓,数据加载并发数 5, 压测并发数在 10~100 之间。表使用分区表,分区数 12。使用复制表和表分组。

7.7.1 清理原库表

sh runSQL.sh props.ob sql.common/tableDrops.sql

华信永道实践:对 OceanBase 做性能测试-77

7.7.2 修改参数配置

修改props.ob 的参数配置,按题目要求,数仓100,加载数据并发5,压测并发10。

tpcc 规格:100仓,数据加载并发数 5, 压测并发数在 10~100 之间。表使用分区表,分区数 12。

华信永道实践:对 OceanBase 做性能测试-78

7.7.3 创建分区表

创建 tablegroup 必须要使用租户的管理员创建

华信永道实践:对 OceanBase 做性能测试-79

obclient -h 25.1.1.100 -P 2883 -uroot@test#obcluster -p -c -A tpcc
 
-- drop tablegroup tpcc_group;
create tablegroup tpcc_group partition by hash partitions 12;

 华信永道实践:对 OceanBase 做性能测试-80

上面bmsql_item使用了【复制表】功能,在租户的所有节点上都会有一个副本。当然主副本始终只有一个。

duplicate_scope='cluster'; CLUSTER :表的备副本分布在租户资源池所在的所有机器上。

sh runSQL.sh props.ob sql.common/tableCreates_parts.sql

华信永道实践:对 OceanBase 做性能测试-81

7.7.4 加载数据

sh runLoader.sh props.ob

华信永道实践:对 OceanBase 做性能测试-82

华信永道实践:对 OceanBase 做性能测试-83

7.7.5 创建索引

obclient -h 25.1.1.100 -P 2883 -utpcc@test#obcluster -p -c -A tpcc

 

create index bmsql_customer_idx1 on bmsql_customer (c_w_id, c_d_id, c_last, c_first) local;
create index bmsql_oorder_idx1 on bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id) local;

华信永道实践:对 OceanBase 做性能测试-84

7.7.6 运行测试

sh runBenchmark.sh props.ob

华信永道实践:对 OceanBase 做性能测试-85 

8、监控性能(可选)

obclient -h 25.1.1.100 -P 2883 -uroot@sys#obcluster -p -c -A
use oceanbase;
grant select on oceanbase.* to dbamonitor identified by '123456';

华信永道实践:对 OceanBase 做性能测试-86

python dooba.py -h 127.1 -uroot@sys#obcluster -P2883 (因为我的测试环境的系统租户root 密码为空,故没写密码)
dooba 进去后,默认是sys租户。按字母小写'c',选择业务租户。按数字'1'查看帮助,数字'2'查看租户总览,数字'3'查看租户的机器性能信息,按TAB切换当前焦点,按字母小写'd' 删除当前TAB,按字母大写R 恢复所有TAB。总览里的NET TAB没有意义可以删除以节省屏幕空间。
 
 
 
 
 
 
没有负载时的监控情况

 

有负载时的监控情况

华信永道实践:对 OceanBase 做性能测试-87

OceanBase 社区版入门到实战教程直播正在进行中~

快和小伙伴一起进群交流学习吧~

加入直播群方式一:

钉钉群号 3582 5151

加入直播群方式二:

扫码下方二维码加入

华信永道实践:对 OceanBase 做性能测试-88

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论