热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

作者简介:邹阳,数据库工程师。本次练习目的掌握OceanBase集群的常规性能测试好方法,包括:sysbench、tpcc测试。
作者简介:邹阳,数据库工程师。

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

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

一、部署环境

服务器信息

机器和角色划分

二、服务器初始化

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

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

2.1安装相关工具软件

yum install epel-release -y


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


2.2内核参数修改

cat >> /etc/sysctl.conf < 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


2.3修改会话变量设置

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


2.4关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2.5关闭 SELinux

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


2.6创建安装用户

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


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


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

此实验时间同步服务使用 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

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

 

 四、中控机配置

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、将离线包上传到中控机

3、yum install -y ob-deploy

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

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

5、clone 后验证

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

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

obd mirror list local

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

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

8、配置双机互信

ssh-keygen -t rsa
ssh-copy-id

 

4.2配置 YAML 文件

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

4.3使用配置文件初始化 OBD

obd cluster deploy obcluster -c obce3.yaml

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

5.1 启动集群

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

obd cluster start obcluster

5.2查看启动后的集群状态

obd cluster list

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

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

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;


5.7通过 obproxy 登陆

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

六、安装配置 sysbench

6.1 安装依赖包

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

yumdownloader --destdir=/tmp –resolve  automake  libtool

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

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/sysbench –help

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"

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%,对性能有影响

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 集群默认有个内部租户(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
;

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

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
;

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

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') ;

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

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;

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

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;

 

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';
 

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

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

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

 

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

 

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

 


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

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

 

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

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

 


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

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

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

 


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

 

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

 

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

 


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';

6.5.2 数据预热

修改脚本

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

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

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

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


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

七、TPC-C 测试

7.1 安装 JDK

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

7.2 解压BenchmarkSQL

unzip benchmarksql-5.0-master.zip

mv benchmarksql-5.0-master benchmarksql

 

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 ;

 


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

7.6.2 加载数据

sh runLoader.sh props.ob

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;

7.6.4 运行测试

sh runBenchmark.sh props.ob

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;

对 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;

 

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

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

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

分析执行计划

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

 

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

 

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

 

7.7 测试分区表

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

7.7.1 清理原库表

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

7.7.2 修改参数配置

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

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

7.7.3 创建分区表

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

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;

 

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

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

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

7.7.4 加载数据

sh runLoader.sh props.ob

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;

7.7.6 运行测试

sh runBenchmark.sh props.ob

 

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';

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


 

有负载时的监控情况


推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
author-avatar
东北的小爷们_366
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有