首页 > 数据库 > > OceanBase 开源版V3.1.1压力测试情况
使用 OBD 部署 OceanBase 数据库,集群部署规模为1:1:1,OBProxy、OBClient 以及 TPC-C 与 TPC-H 测试工具部署在另一台服务器上, 作为客户端的压力测试服务器,分别进行 TPC-C 与 TPC-H 测试。测试集群拓扑示意图如下:

测试祼金属服务器四台,硬件配置如下:

安装主要软件及其版本如下:

1.进程打开文件参数优化

2.网络参数优化

distribute.yml 完整配置如下:
user:username: adminkey_file: /home/admin/.ssh/id_rsaport: 48539
oceanbase-ce:servers:- name: server1ip: 10.30.30.11- name: server2ip: 10.30.30.12- name: server3ip: 10.30.30.13global:devname: eth3memory_limit: 128Gsystem_memory: 30Gdatafile_disk_percentage: 20syslog_level: INFOenable_syslog_wf: falseenable_syslog_recycle: truemax_syslog_file_count: 4skip_proxy_sys_private_check: trueserver1:mysql_port: 2881rpc_port: 2882home_path: /opt/oceanBase_data/admindata_dir: /opt/oceanBase_data/dataredo_dir: /opt/oceanBase_data/repozone: zone1server2:mysql_port: 2881rpc_port: 2882home_path: /opt/oceanBase_data/admindata_dir: /opt/oceanBase_data/dataredo_dir: /opt/oceanBase_data/repozone: zone2server3:mysql_port: 2881rpc_port: 2882home_path: /opt/oceanBase_data/admindata_dir: /opt/oceanBase_data/dataredo_dir: /opt/oceanBase_data/repozone: zone3
obproxy:depends:- oceanbase-ceservers:
- 10.30.10.27global:listen_port: 2883prometheus_listen_port: 2884home_path: /home/admin/oceanBase/proxy/enable_cluster_checkout: falseskip_proxy_sys_private_check: true
create resource unit tpcc_unit max_cpu 26,
max_memory = '32G',
max_iops 128,
max_disk_size '100G',
max_session_num 64,
MIN_CPU = 26,
MIN_MEMORY = '32G',
MIN_IOPS = 128;
create resource pool tpcc_pool unit = 'tpcc_unit',
unit_num = 1,
zone_list =('zone1','zone2','zone3');
create tenant tpcc_tenant resource_pool_list =('tpcc_pool'),
charset = utf8mb4,
replica_num = 3,
zone_list('zone1','zone2','zone3'),
primary_zone = RANDOM,
locality = 'F@zone1,F@zone2,F@zone3' set ob_compatibility_mode = mysql;
ALTER TENANT tpcc_tenant SET VARIABLES ob_tcp_invited_nodes = '%';
grant file on *.* to root@tpcc_tenant;
db=oceanbase
driver=com.mysql.jdbc.Driver
conn=jdbc:mysql://10.30.10.27:2883/tpcc?rewriteBatchedStatements=true&allowMultiQueries=true&useLocalSessionState=true&useUnicode=true&characterEncoding=utf-8&socketTimeout=30000000
user=root@tpcc_tenant
password=
warehouses=100
loadWorkers=34
terminals=300
database=tpcc
runTxnsPerTerminal=
runMins=5
limitTxnsPerMin=
terminalWarehouseFixed=true
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
6 生成并装载 TPC-C 测试数据到 OceanBase 数据库,数据装载完成后进行数据合并,装载数据与合并方法按照官方 OceanBase 数据库 TPC-C 测试文档执行。
7. 测试数据装载完成后各表数据量情况:

##如果导入阶段开启了限速需要关闭
alter system set writing_throttling_trigger_percentage=100 tenant=tpcc_tenant;
alter system set writing_throttling_maximum_duration='1h';
alter system set memstore_limit_percentage = 80;
alter system set freeze_trigger_percentage = 30;
alter system set large_query_threshold = '200s';
alter system set trx_try_wait_lock_timeout = '0ms';
alter system set cpu_quota_concurrency = 4;
alter system set minor_warm_up_duration_time = ;
alter system set minor_freeze_times=500;
alter system set minor_compact_trigger=3;
alter system set sys_bkgd_io_high_percentage = 90;
alter system set sys_bkgd_io_low_percentage = 70;
alter system set minor_merge_concurrency =20;
alter system set builtin_db_data_verify_cycle = ;
alter system set trace_log_slow_query_watermark = '10s';
alter system set gts_refresh_interval='500us';
alter system set server_permanent_offline_time='36000s';
alter system set weak_read_version_refresh_interval=;
alter system set _ob_get_gts_ahead_interval = '5ms';
##为频繁空查的宏块建立bloomfilter并缓存,减少磁盘IO和CPU消耗,提升写入性能
alter system set bf_cache_priority = 10;
alter system set user_block_cache_priority=5;
alter system set merge_stat_sampling_ratio = ;
##close sql audit
alter system set enable_sql_audit=false;
##调整日志级别及保存个数
alter system set syslog_level='PERF';
alter system set max_syslog_file_count=100;
alter system set enable_syslog_recycle='True';
alter system set ob_enable_batched_multi_statement=true tenant=tpcc_tenant;
alter system set _cache_wash_interval = '1m';
alter system set plan_cache_evict_interval = '30s';
alter system set enable_one_phase_commit=false;
alter system set enable_monotonic_weak_read = false;
2 使用 ./runBenchmark.sh prop.oceanbase 命令执行 TPC-C 测试,等待测试完成,执行日志打印如下:

1.先安装 gcc、python、TPC-H Tools,安装方法与步骤按照官方 OceanBase 数据库 TPC-H 测试文档执行,使用 TPC-C 测试已经创建好的 tpcc_tenant 测试租户用于 TPC-H 测试。
2.对 OceanBase 系统配置与变量参数进行优化,优化方法按照官方 OceanBase 数据库TPC-H测试文档执行。
3.修改 TPC-H Tools 部分源码,修改及编译构建方法按照官方 OceanBase 数据库 TPC-H 测试文档执行。其中 db13 语句有语法错误,需要修改如下才能正常执行:
select /*+ parallel(96) */
c_count,
count(*) as custdist
from
(
select
c_custkey,
count(o_orderkey) as c_count #修改点from
customer left outer join orders on
c_custkey = o_custkey
and o_comment not like '%special%packages%'group by
c_custkey
) c_orders
group by
c_count
order by
custdist desc,
c_count desc;
4.生成 10GB 的 TPC-H 测试数据并装载测试数据到 OceanBase 数据库,数据装载完成后进行数据合并,装载数据与合并方法按照官方 OceanBase 数据库 TPC-H 测试文档执行。load.py 修改如下:
#/usr/bin/evn python
#-*- encoding:utf-8 -*-
import os
import sys
import time
import commands
hostname='10.30.30.11'
port='2881'
tenant='tpcc_tenant'
user='root'
password=''
data_path='/data1/tpch10'
db_name='tpch'
#创建表
cmd_str='obclient -h%s -P%s -u%s@%s < create_tpch_mysql_table_part.sql'%(hostname,port,user,tenant)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str='obclient -h%s -P%s -u%s@%s -D%s -e "show tables;" '%(hostname,port,user,tenant,db_name)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/customer.tbl' into table customer fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/lineitem.tbl' into table lineitem fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/nation.tbl' into table nation fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/orders.tbl' into table orders fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -D%s -e "load data /*+ parallel(80) */ infile '%s/partsupp.tbl' into table partsupp fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/part.tbl' into table part fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/region.tbl' into table region fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
cmd_str=""" obclient -h%s -P%s -u%s@%s -c -D%s -e "load data /*+ parallel(80) */ infile '%s/supplier.tbl' into table supplier fields terminated by '|';" """ %(hostname,port,user,tenant,db_name,data_path)
result = commands.getstatusoutput(cmd_str)
print result
5.测试数据装载完成后各表数据量情况:

1.在 TPC-H Tools 的 dbgen/queries 目录下,创建 tpch.sh 测试脚本,编写内容如下:
#!/bin/bash
TPCH_TEST="obclient -h10.30.10.27 -P2883 -uroot@tpcc_tenant -Dtpch -c"
#warmup预热
for i in {1..22}
do
sql1="source db${i}.sql"echo $sql1| $TPCH_TEST >db${i}.log || ret=1
done
#正式执行
for i in {1..22}
do
starttime=`date +%s%N`
echo `date '+[%Y-%m-%d %H:%M:%S]'` "BEGIN Q${i}"
sql1="source db${i}.sql"echo $sql1| $TPCH_TEST >db${i}.log || ret=1
stoptime=`date +%s%N`
costtime=`echo $stoptime $starttime | awk '{printf "%0.2f\n", ($1 - $2) / 1000000000}'`
echo `date '+[%Y-%m-%d %H:%M:%S]'` "END,COST ${costtime}s"
done
2.执行 sh tpch.sh 命令,该脚本在预热执行期间没有终端日志打印输出,可通过 dbgen/queries 目录下的 db*.log 文件是否生成来确定预热执行的进度。正式执行的终端日志打印如下:
[2021-12-15 11:15:55] BEGIN Q1
[2021-12-15 11:15:56] END,COST 1.70s
[2021-12-15 11:15:56] BEGIN Q2
[2021-12-15 11:15:57] END,COST 0.27s
[2021-12-15 11:15:57] BEGIN Q3
[2021-12-15 11:15:58] END,COST 1.52s
[2021-12-15 11:15:58] BEGIN Q4
[2021-12-15 11:15:58] END,COST 0.35s
[2021-12-15 11:15:58] BEGIN Q5
[2021-12-15 11:16:00] END,COST 1.60s
[2021-12-15 11:16:00] BEGIN Q6
[2021-12-15 11:16:01] END,COST 0.83s
[2021-12-15 11:16:01] BEGIN Q7
[2021-12-15 11:16:03] END,COST 1.76s
[2021-12-15 11:16:03] BEGIN Q8
[2021-12-15 11:16:04] END,COST 1.22s
[2021-12-15 11:16:04] BEGIN Q9
[2021-12-15 11:16:07] END,COST 3.30s
[2021-12-15 11:16:07] BEGIN Q10
[2021-12-15 11:16:08] END,COST 0.39s
[2021-12-15 11:16:08] BEGIN Q11
[2021-12-15 11:16:08] END,COST 0.87s
[2021-12-15 11:16:08] BEGIN Q12
[2021-12-15 11:16:09] END,COST 1.04s
[2021-12-15 11:16:09] BEGIN Q13
[2021-12-15 11:16:10] END,COST 0.77s
[2021-12-15 11:16:10] BEGIN Q14
[2021-12-15 11:16:10] END,COST 0.21s
[2021-12-15 11:16:10] BEGIN Q15
[2021-12-15 11:16:11] END,COST 0.55s
[2021-12-15 11:16:11] BEGIN Q16
[2021-12-15 11:16:11] END,COST 0.46s
[2021-12-15 11:16:11] BEGIN Q17
[2021-12-15 11:16:13] END,COST 1.02s
[2021-12-15 11:16:13] BEGIN Q18
[2021-12-15 11:16:14] END,COST 1.10s
[2021-12-15 11:16:14] BEGIN Q19
[2021-12-15 11:16:15] END,COST 1.10s
[2021-12-15 11:16:15] BEGIN Q20
[2021-12-15 11:16:16] END,COST 1.17s
[2021-12-15 11:16:16] BEGIN Q21
[2021-12-15 11:16:18] END,COST 2.22s
[2021-12-15 11:16:18] BEGIN Q22
[2021-12-15 11:16:19] END,COST 0.60s
使用 SSD 硬盘做为 OceanBase 数据存储,通过修改 prop.oceanbase 的 terminals 参数来修改 TPC-C 的测试并发数,测试结果如下:


从以上测试数据可以看出,随着测试并发数的增加,由于 OceanBase 服务器集群资源负荷增大,事务平均响应时间会逐步增加,但总的 TpmC 会提高;但当测试并发数达到或超过临界点后,OceanBase服务器集群资源超出最大负载,总的 TpmC 反而会下降。
分别使用 SSD 硬盘、SATA 硬盘做为 OceanBase 数据存储,100并发测试结果如下:

从上表测试数据可以看出,使用 SSD 硬盘,无论是总的 TpmC 还是事务的平均响应时间,比起使用 SATA 盘都会有一定的优势,但优势并不是很明显。应该是因为 OceanBase 使用 LSM Tree 存储架构提高了内存的使用效率,降低了硬盘读写损耗对系统的影响。
使用 SSD 硬盘做为 OceanBase 数据存储,修改 tpch.sh 脚本,注释掉预热部分代码,在装载数据成功后第一次执行即为非预热执行,第二次执行脚本则为预热后执行,测试结果如下:


从上表测试数据可以看出,预热后TPC-H的测试SQL语句执行性能会有一定的提升,是因为SQL在解析与执行时命中了执行计划缓存与部分数据缓存所致。
分别使用SSD硬盘、SATA硬盘做为OceanBase数据存储,执行测试结果如下:



从以上测试数据可以看出,在没有预热的情况下,使用 SSD 硬盘比使用 SATA 硬盘有较大的性能提升;但在有预热的情况下,使用 SSD 硬盘比使用 SATA 硬盘的性能提升则不是很明显。应该是因为在预热情况下 TPC-H 的测试 SQL 语句在执行时命中了部分数据缓存,减少了从硬盘读取数据所带来的损耗。
https://zhuanlan.zhihu.com/p/468508144
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69999831/viewspace-3152041/ ,如需转载,请注明出处,否则将追究法律责任。