作者简介:邹阳,数据库工程师。
本次练习目的掌握 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 <<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
2.3修改会话变量设置
cat >> /etc/security/limits.conf <<EOF * - 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 < d_next_o_id WHERE d_w_id = 1 AND d_id = 7 ) )\G;
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;
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;
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没有意义可以删除以节省屏幕空间。 没有负载时的监控情况
有负载时的监控情况
OceanBase 社区版入门到实战教程直播正在进行中~
快和小伙伴一起进群交流学习吧~
加入直播群方式一:
钉钉群号 3582 5151
加入直播群方式二:
扫码下方二维码加入